JavaScript笔记 #06# Promise简单例子
Notes
参考资料:
你去书店借书,按照异步的套路,剧情如下↓
你:“老板,有xxx吗?”
老板:“你等下,我得找一找看,到时候打电话给你。”
然后你就去做其它事情了。
1、回调版本:
// 辅助函数
const randomBoolean = () => {
return Math.random() < 0.5;
}; // 客户对象,处理找书的结果
const customer = {
dealWithResult: function(success) {
if(success) {
console.log('customer:去书店取书');
} else {
console.log('customer:有空去别的书店问问');
}
}
} // 书店老板对象,提供一个异步的找书方法。
const bossOfBookstore = {
askForBook: function(bookName, phoneNumber) {
setTimeout((phoneNumber) => {
let result = randomBoolean();
console.log('bossOfBookstore:' + (result ? '找到书了' : '没有这本书'));
customer.dealWithResult(result);
}, );
}
} //debugger;
bossOfBookstore.askForBook('某某书', );
// → bossOfBookstore:没有这本书
// → customer:有空去别的书店问问
2、Promise版本1:
// 辅助函数
const randomBoolean = () => {
return Math.random() < 0.5;
}; // 客户对象,处理找书的结果
const customer = {
dealWithResult: function(success) {
if(success) {
console.log('customer:去书店取书');
} else {
console.log('customer:有空去别的书店问问');
}
}
} // 书店老板对象,提供一个异步的找书方法。
const bossOfBookstore = {
askForBook: function(bookName, phoneNumber) {
return new Promise(resolve => {
setTimeout(phoneNumber => {
let result = randomBoolean();
console.log('bossOfBookstore:' + (result ? '找到书了' : '没有这本书'));
resolve(result); // 书店老板才不关心你怎么处理的!
}, 3000);
});
}
} bossOfBookstore.askForBook('某某书', 15298000122).then(result => {
customer.dealWithResult(result);
});
3、Promise版本2:
// 辅助函数
const randomBoolean = () => {
return Math.random() < 0.5;
}; // 客户对象,处理找书的结果
const customer = {
dealWithResult: function(success) {
if(success) {
console.log('customer:去书店取书');
} else {
console.log('customer:有空去别的书店问问');
}
}
} // 书店老板对象,提供一个异步的找书方法。
const bossOfBookstore = {
askForBook: function(bookName, phoneNumber) {
return new Promise((resolve, reject) => {
setTimeout(phoneNumber => {
let result = randomBoolean();
console.log('bossOfBookstore:' + (result ? '找到书了' : '没有这本书'));
if (result) {
resolve(true);
} else {
reject(false);
}
}, 500);
});
}
} // 写法一
bossOfBookstore.askForBook('某某书', 15298000122).then(result => {
customer.dealWithResult(result);
}).catch(result => {
customer.dealWithResult(result);
}); // 写法二
bossOfBookstore.askForBook('某某书', 15298000122).then(result => {
customer.dealWithResult(result);
}, result => {
customer.dealWithResult(result);
});
JavaScript笔记 #06# Promise简单例子的更多相关文章
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
1.AWT简单例子 TestFrame.java import java.awt.Button; import java.awt.Frame; import java.awt.event.Action ...
- javascript笔记06:类的创建
1.创建一个javascript类---javascript使用函数形式构建类 <script type="text/javascript"> //定义一个类 ...
- [Effective JavaScript 笔记]第68条:使用promise模式清洁异步逻辑
构建异步API的一种流行的替代方式是使用promise(有时也被称为deferred或future)模式.已经在本章讨论过的异步API使用回调函数作为参数. downloadAsync('file.t ...
- Linux笔记 #09# Tomcat多开以及Nginx负载均衡简单例子
索引 Tomcat怎样多开.. 1.添加环境变量(最基础.关键的步骤!) 2.改catalina.sh 3.改相关端口 Nginx负载均衡简单例子 Tomcat怎样多开.. 演示一下如何开两个(开n个 ...
- JavaScript模块化-RequireJs实现AMD规范的简单例子
AMD规范简介 AMD(异步模块定义),是实现JavaScript模块化规范之一,它采用异步方式加载模块,模块的加载不影响后面语句的运行.require.js和curl.js都是实现AMD规范的优秀加 ...
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...
- 一个简单例子弄懂什么是javascript函数劫持
javascript函数劫持很简单,一般情况下,只要在目标函数触发之前,重写这个函数即可. 比如,劫持eval函数的代码如下: var _eval=eval; eval=function(x){ if ...
- Javascript中的Promise
Promise定义 Promise是CommonJs的规范之一,包含resolve,reject,done,fail,then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.异步在web开发中 ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
随机推荐
- 块结构在文件中的表示IOB【转载】
转自:http://www.coderjie.com/blog/43b3601e0a2411e7841d00163e0c0e36 1.块在内存中以树的形式存储,分好块的文本在文件中用IOB标记存储: ...
- windows下使用sed和tee命令
最近需要在winowds slave上设置构建app和sdk,至于如何在windows slave上构建c/c++代码生成sdk(dll,lib之类)和apk(exe文件),请参考我的另外一篇博客,即 ...
- JS基础篇-- body.scrollTop与documentElement.scrollTop
获取当前页面滚动条纵坐标的位置:document.body.scrollTop与document.documentElement.scrollTop 获取当前页面滚动条横坐标的位置:document. ...
- UVAL 4728 Squares(旋转卡壳)
Squares [题目链接]Squares [题目类型]旋转卡壳 &题解: 听着算法名字,感觉挺难,仔细一看之后,发现其实很简单,就是依靠所构成三角行面积来快速的找对踵点,就可以省去很多的复杂 ...
- 从0开始搭建vue+webpack脚手架(二)
接着从0开始搭建vue+webpack脚手架(一) 三.配置webpack-dev-server 1. webpack-dev-server自带一个node的服务器, 项目在服务端运行的同时可以实现热 ...
- mysql基础常用命令
数据库 1查询 Select * From table select host,user,password from mysql.user where user='ybb' and host='%'; ...
- SQLAllocHandle
函数定义: 顾名思义,该函数就是用来分配句柄的,句柄类型参考参数详解. SQLRETURN SQLAllocHandle( SQLSMALLINT HandleType, SQLHANDLE ...
- 阿里云ECS服务器 常见问题(1)
无法在外网访问服务器的公网ip 解决方法: 在阿里云 云服务器ECS-安全组规则 添加端口 可更根据阿里的教程来 配置完成后即可访问!
- RepRap Prusa i3 平台自動補正
RepRap Prusa i3 平台自動補正 平台校正不但費時,而且經常失敗,時在是很令人洩氣!期盼了好一陣子,Marlin終於將平台自動補正的功能加進來了!!這個功能將原本Z軸的Endstop,改裝 ...
- html5-文本属性
/*p{color: red;width: 50%;text-align: center;background: blue;}p{text-align: end;}p{text-align: end; ...