Promise对象详解
来源:互联网 发布:淘宝照片拍摄技巧 编辑:程序博客网 时间:2024/05/14 17:56
1.简介
Promise是抽象异步处理对象以及对其进行各种操作的组件。
2.对象状态
Promise对象有2种状态:
promise对象被 resolve 时的处理(onFulfilled)
promise对象被 reject 时的处理(onRejected)
3.创建Promise对象
创建一个Promise对象一般分为2步:
a.new Promise(function(resolve,reject){
//业务逻辑
//处理结果正确就调用resolve方法
//处理逻辑错误叫调用reject方法
})
b.调用Promise实例的then()、catch()方法,异步处理完成就执行then方法,处理异常就执行catch方法。
function aysncTest(){ return new Promise(function (resolve, reject) { setTimeout(function () { resolve('Async Hello world'); }, 16); })}aysncTest().then(function (value) { console.log(value); // => 'Async Hello world'}).catch(function (error) { console.log(error);})
4.Promise方法
4.1实例方法
then(fn):该方法是用来注册Promise实例的状态为onFulfilled时的回调函数。
catch(fn):该方法是用来注册Promise实例的状态为onRejected时的回调函数,它其实是promise.then(undefind,onRejected)的另一种写法而已。
Pormise对象支持链式写法,在链式写法中每个then的执行都是同步,不是链式写法则then的执行是异步的。
var promise = new Promise(function (resolve){ console.log("inner promise"); // 1 resolve(42);});promise.then(function(value){ console.log(value); // 2}).then(function(value="outer promise" ){ console.log(value); // 3 return value;}).catch(function(error){ console.log(error); // 3 return error;}).then(function(value){ console.log(value); // 4});//执行结果://inner promise//42//outer promise//outer promise
注意:then和catch返回的都是一个全新的Promise对象,在执行这两个方法后,不论返回的数据类型是什么,都会被包装成一个全新的Promise对象。返回的数据会传递到下一个链式方法里作为参数。
4.2静态方法
Promise.resolve(value):使promise对象立即进入onResolved状态,并且将value参数传给then方法。相当于如下代码:
new Promise(function (resolve){ resolve(value);});
resolve方法还能将thenable(具有then方法的对象)转换为Promise对象,但是需要注意的是:两个对象的then必须有同样的机制和处理流程,否则会导致部分信息丢失,
例如:jQuery.ajax()的返回值就具有then方法,但是2者机制不同,强转的话就会导致部分信息不完整。
Promise.reject(error):使promise对象立即进入onRejected状态,并且将error参数传给catch方法。相当于如下代码:
new Promise(function(resolve,reject){ reject(error);});
Promise.all(array):接收一个 promise对象的数组作为参数,当这个数组里的所有promise对象全部变为resolve或reject状态的时候,它才会去调用 .then 方法。
var promise1 = new Promise(function (resolve){ resolve("promise1 is resolve");});var promise2 = new Promise(function (resolve){ resolve("promise2 is resolve");});function main(){ return Promise.all([promise1,promise2])}main().then(function(value){ console.log(value)})//执行结果://["promise1 is resolve", "promise2 is resolve"]
Promise.race(array):接收一个 promise对象的数组作为参数,当这个数组里只要有一个promise对象进入reject状态的时候,它才会去调用 .then 方法。
// `delay`毫秒后执行resolvefunction timerPromisefy(delay) { return new Promise(function (resolve) { setTimeout(function () { resolve(delay); }, delay); });}// 任何一个promise变为resolve或reject 的话程序就停止运行Promise.race([ timerPromisefy(1), timerPromisefy(32), timerPromisefy(64), timerPromisefy(128)]).then(function (value) { console.log(value); // => 1});
阅读全文
0 0
- JavaScript Promise对象详解
- 详解Promise对象
- Promise对象详解
- Promise对象详解
- es6的Promise对象详解
- Promise对象
- Promise对象
- Promise对象
- Promise对象
- Promise对象
- Promise 对象
- Promise对象
- Promise对象
- promise对象
- es6 promise对象
- Angularjs promise对象解析
- Angularjs promise对象解析
- ES6 Promise 对象
- 控件问题
- bzoj 3140: [Hnoi2013]消毒 dfs+网络流
- C++静态库与动态库区别
- 《程序调试思想与实践》.(The.Science.of.Debugging)读书笔记
- ios 转场动画
- Promise对象详解
- Andriod系统程序监听SD卡的插拔
- dvm 与jvm 区别
- 分享一个GitHub 上的控件:MaterialEditText 详解
- Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) C. Success Rate(数学,二分)
- package,source folder,folder 之间相互转换
- Ajax学习(二):省市区联动实现
- 游标的使用
- 智能指针auto_ptr管理单例