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. SQL 、NoSQL数据库教程

    前言: 嗯,先说说数据库的分类吧,其实主要大的分类就是关系型数据库(SQL)和非关系型数据库(NoSQL); 实验楼上有常见的数据库教程,这里做一个整理,希望对你学习数据库方面的知识有所帮助: 关系型 ...

  2. git-代码同步至github

    代码同步到github上 Last login: Wed Mar 27 13:53:06 on ttys001localhost:~ ligaijiang$ gitusage: git [--vers ...

  3. ODS与DW之间的关系

    1.什么是数据仓库? 数据仓库是面向主题的.集成的.相对稳定的.反应历史变化的数据集合,主要用于决策支持和信息的全局共享. 时效:T+1 2.什么是ODS? ODS全称为Operational Dat ...

  4. vue2.3时使用手机调试,提示媒体已断开的解决方案

    参考链接:http://www.xitonghe.com/jiaocheng/windows7-9623.html 1.在当前版本vue下开发,发现只能在localhost时调试,不能使用电脑的ip, ...

  5. vue中把table导出表格excel

    1.首先下载2个js,我的百度网盘有 2.安装依赖 npm install -S file-saver xlsx(这里其实安装了2个依赖) npm install -D script-loader 3 ...

  6. Python实现selenium回放时间设置

    一般在做selenium时会有,回放快慢的需求. 实现思路: 1.一般写selenium会自定义findelement函数,来实现查找元素. 2.在查找函数上加个睡眠时间的装饰器,函数执行完等待若干秒 ...

  7. Spring中集合注入方法

    集合注入重要是对数组.List.Set.map的注入,具体注入方法请参照一下代码(重点是applicationContext.xml中对这几个集合注入的方式): 1.在工程中新建一个Departmen ...

  8. C# Dapper 简单实例

    /// <summary> /// 分页信息 /// </summary> public class PageInfo<T>     {         /// & ...

  9. List<String> 2List <Long>

    public static List<Integer> CollStringToIntegerLst(List<String> inList){ List<Integer ...

  10. 【Linux学习八】脚本编程

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 一.多层bash#.和source都是当前bash [root@nod ...