node与ES6系列2——promise对象
来源:互联网 发布:巨人网络招聘会计 编辑:程序博客网 时间:2024/06/08 01:33
2、promise对象
js单线程异步执行的特性,因此在代码中充斥着回调函数。随着回调函数的增加,代码的可读性会愈来愈差,因此引入promise对象是不错的一种选择,可以避免层层回调函数。在ECMA6中提供了原生的promise对象而不再需要第三库。
2.1 promise构造
ECMA6中所提供的promise对象是由构造函数生成的,基本用法如下:
代码 2.1.1
new Promise(function (resolver, reject) { if (success) resolver(data) else reject(error)});
在promise的构造函数中接受(一个带有两个参数的)函数做为入参,两个参数分别是resolver和reject,用于在异步回调中将状态改为成功,或将状态改为失败。代码2.1.2展示promise的简单示例:
var getData = function (data) { return new Promise(function (resolver, reject) { if (data === -1) reject(data); setTimeout(resolver([1, 2, 3, 4, 5]), 1); })}
getdata是一个返回promise对象的函数,通过setTimeout来模拟异步操作,当操作成功返回数组[],当输入参数为-1时返回失败状态。代码2.1.3调用getdata函数并返回结果,通过then方法得到成功后回调,而通过catch指定失败后的回调,除了通过catch方法指定失败回调外,还可以通过then方法的第二参数指定失败回调,两种方式等价。
getData(1).then(function (data) { console.log(data);}).catch(function (data) { console.log('出现异常:'+data);})====[ -1, 2, 3, 4, 5 ]
2.2、promise.all
很多业务场景需要对数据进行集合操作,例如发送数据取出一个集合数据,遍历集合数据将集合数据又发送至另一个接口取数据,这是一个典型的二次调用接口方法,此时就需要使用到promise.all 方法。
// return 集合var getData = function (data) { return new Promise(function (resolver, reject) { if (data === -1) reject(data); setTimeout(resolver([-1, 2, 3, 4, 5]), 1); })}var getdataInfo = function (data) { return new Promise(function (resolver, reject) { if (data === -1) reject(data); console.log(data + '的详情是...'); setTimeout(resolver(data), 1); })}getData(1).then(function (data) { var array = data.map(getdataInfo); Promise.all(array).then(function (data) { console.log('全部请求成功'); }).catch(function (data) { console.log('数据' + data + '失败'); });})
getdata函数返回一个集合,集合中的数据作为getdatainfo的函数的参数,而datainfo函数也是一个异步操作,首先通过数组map方法生成promise对象的数组,然后调用promise.all(array)调用promise数组,当整个promise都返回时触发promise.all的then方法,当其中一个失败的时候触发catch方法。
- node与ES6系列2——promise对象
- node与ES6系列3——generator对象
- ES6——Promise
- ES6 —(Promise)
- node与ES6系列1——变量声明
- node与ES6系列4——class
- es6系列-promise
- 【ES6学习】— (2)异步编程Generator函数和Promise对象简介
- es6 promise对象
- ES6 Promise 对象
- ES6 Promise对象
- ES6 Promise对象学习心得
- ES6中的promise对象
- ES6(六) promise对象
- 浅谈ES6 Promise对象
- ES6 Promise 对象理解
- ES6 -- Promise对象
- ES6之Promise对象
- HDU 2073 无限的路
- VS2015+opencv3.1.0环境搭建
- iOS runtime 运行时
- Java笔记6:多态
- Linux驱动mmap内存映射
- node与ES6系列2——promise对象
- Android aidl在Framework的使用
- LeetCode Length of Last Word
- 欢迎使用CSDN-markdown编辑器
- 【iOS开发】runtime机制
- 重磅!从单层感知器到深度学习以及深度学习必知的框架
- 给python安装theano包
- 阿里druid学习,号称最好的数据库连接池
- Hadoop 1.x启动服务的顺序学习