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等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
随机推荐
- nginx命令行参数
通过控制台进入nginx目录后 1. 启动nginx start nginx 或 nginx.exe 2. 重启nginx nginx -s reload 3. 停止nginx nginx -s st ...
- [LeetCode] 788. Rotated Digits_Easy tag: **Dynamic Programming
基本思路建一个helper function, 然后从1-N依次判断是否为good number, 注意判断条件为没有3,4,7 的数字,并且至少有一个2,5,6,9, 否则的话数字就一样了, 比如8 ...
- [Java in NetBeans] Lesson 06. Custom classes
这个课程的参考视频和图片来自youtube. 主要学到的知识点有: Constructors: A special method called when an object of the class ...
- test4
- Spring+SpringMVC+MyBatis整合配置
前端控制器 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=& ...
- MFC 显示图片
//定义成员变量 CStatic m_picture; m_picture.Create(L"XXX",WS_VISIBLE|WS_CHILD|SS_BITMAP ,CRect(, ...
- strlen实现
1.strlen函数. 普通版实现方法, int strlen( char *s) { int length = 0; while(*s++) length++; return length; } 优 ...
- [6]传奇3服务器源码分析一GameGate
1. 2. 留存 服务端下载地址: 点击这里
- 《大话设计模式》c++实现 工厂模式
工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端 ...
- date的用法
date -d "-1 month" "+%T" 当前时间减少一个月 +%T 简便表示时分秒 +%F 简便表示年月日 date +%Y 四位年份 date + ...