Notes

参考资料:

Promise

JavaScript Promise:简介

你去书店借书,按照异步的套路,剧情如下↓

你:“老板,有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简单例子的更多相关文章

  1. Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子

    1.AWT简单例子 TestFrame.java import java.awt.Button; import java.awt.Frame; import java.awt.event.Action ...

  2. javascript笔记06:类的创建

    1.创建一个javascript类---javascript使用函数形式构建类 <script type="text/javascript">  //定义一个类     ...

  3. [Effective JavaScript 笔记]第68条:使用promise模式清洁异步逻辑

    构建异步API的一种流行的替代方式是使用promise(有时也被称为deferred或future)模式.已经在本章讨论过的异步API使用回调函数作为参数. downloadAsync('file.t ...

  4. Linux笔记 #09# Tomcat多开以及Nginx负载均衡简单例子

    索引 Tomcat怎样多开.. 1.添加环境变量(最基础.关键的步骤!) 2.改catalina.sh 3.改相关端口 Nginx负载均衡简单例子 Tomcat怎样多开.. 演示一下如何开两个(开n个 ...

  5. JavaScript模块化-RequireJs实现AMD规范的简单例子

    AMD规范简介 AMD(异步模块定义),是实现JavaScript模块化规范之一,它采用异步方式加载模块,模块的加载不影响后面语句的运行.require.js和curl.js都是实现AMD规范的优秀加 ...

  6. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  7. 一个简单例子弄懂什么是javascript函数劫持

    javascript函数劫持很简单,一般情况下,只要在目标函数触发之前,重写这个函数即可. 比如,劫持eval函数的代码如下: var _eval=eval; eval=function(x){ if ...

  8. Javascript中的Promise

    Promise定义 Promise是CommonJs的规范之一,包含resolve,reject,done,fail,then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.异步在web开发中 ...

  9. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

随机推荐

  1. php合并数组并保留键值的方法

    答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...

  2. MySQL更新

    1.两表更新(用一个表更新另一个表) UPDATE t_i_borrower a, t_supplier s SET a.type = s.type WHERE a.cust_id = s.cust_ ...

  3. HTTP请求响应报文 - 相关状态码 - GET_POST请求方法

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET ...

  4. 用于模型选择的AIC与BIC

    一.AIC(Akaike information Criterion)准则 二.BIC(Bayesian information Criterion)准则 参考文献: [1]AIC与BIC区别

  5. 工作流引擎--swamp

    什么是工作流引擎(Workflow Engine )   例如开发一个系统最关键的部分不是系统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性.易维 ...

  6. python socket 老生常谈

    没啥可说的,直接看代码 //server import socket s = socket.socket() host = socket.gethostname() print 'host: ', h ...

  7. iOS 开发笔记-报错处理

    1.xcode7报错:does not contain bitcode 解决方法:Build Settings 搜索 bitcode  将Enable Bitcode更改为NO即可 2.Code Si ...

  8. 自定义Http请求头并且获取

    在一些开发需求中.我们需要把一些信息放到Http请求头中.比如我需要把签名信息 signature 放到Http请求头 所以就需要自定义请求头 signature ,用webClient发起请求 我这 ...

  9. Oracle表空间管理相关

    以下以我自己的测试环境举例: 1.表空间的 block_size 为 8192字节,即8KBytes.从数据字典中查到 max_size 为 2147483645,即约为15.9TBytes. 2.在 ...

  10. 四 js Math数学简单使用

    //Math是全局的 //Math.PI 数学里的3.1415926.... console.log(Math.PI); //取随机数 //js提供的随机函数 Math.random() --> ...