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等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
随机推荐
- 9个Linux系统常用监控命令
我们的系统一旦上线跑起来我们自然希望它一直相安无事,不要宕机,不要无响应,不要慢腾腾的.但是这不是打开机器电源然后放任不管就可以得到的.所以我们要监视系统的运行状况,发现问题及时处理. 对于系统和网络 ...
- app刷新
https://segmentfault.com/a/1190000006733978 优化TCP socket参数,包括:是否关闭快速回收.初始RTO.初始拥塞窗口.socket缓存大小.Delay ...
- Elasticsearch5.x批量插入数据(Java)
先上官方示例代码:官方示例 Java代码: // 批量插入数据 public void InsertBatch() { try { // 设置集群名称 Settings settings = Sett ...
- svn加锁设置
SVN 的锁定与解锁 简单的说,如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自由地对本地copy编辑edit并提交commit,这样可能会导致冲突conflict,最后不得不合 ...
- Entity Framework Code First(Mysql)
1.添加NuGet包 引用NuGet包:EntityFramework6.1.3.MySql.Data.Entity6.9.8 2.修改配置 SqlServer配置: <add name=&qu ...
- Mysql自增ID起始值修改
在mysql中很多朋友都认为字段为AUTO_INCREMENT类型自增ID值是无法修改,其实这样理解是错误的,下面介绍mysql自增ID的起始值修改与设置方法.通常的设置自增字段的方法:创建表格时添加 ...
- Installshield2015 定制安装在C:\Program files 目录 不正确问题
情境描述:安装时,选择定制安装,安装目录选择C:\Program Files,安装后文件并没有到C:\Program Files,而是安装到了C:\Program Files (x86)目录下. 原因 ...
- js字符串三个编码的区别
1.escape():编码目的为了防止字符串中特殊字符造成运算错误,主要在字符串运算中使用: 不进行编码的69个字符:A-Z.a-z.0-9.@.*._.+.-...\. 2.encodeURI(): ...
- Mongodb内嵌数组的完全匹配查询
样例数据: { "cNo" : "11", "Details" : [ { &q ...
- jquery ajax 中各个事件执行顺序
jquery ajax 中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事 ...