名词约定
一般来讲,有以下的名词约定:
promise(首字母小写)对象指的是“Promise实例对象”
Promise首字母大写且单数形式,表示“Promise构造函数”
Promises首字母大写且复数形式,用于指代“Promises规范”
promise是什么?
是异步队列的一种解决方案
有哪些状态和参数?
promise有三种状态
1.pending【待定】初始状态
2.fulfilled(否否得)【实现】操作成功
3.rejected (瑞杰巅特)【被否决】操作失败
改变他们的状态,如果从pending状态变成fulfilled状态或rejected状态,成功回调fulfilled,失败回调rejected,then(接受成功数据) catch(接受失败数据)
resolve (瑞肉服)的作用是,将promise从未完成变为完成,异步操作成功时调用,结果传递出去
reject (瑞街可的)作用是,将promise状态从未完成变为完成,并将异步操作的错误,传递出去
all()方法:
Promise 的 all 方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。
比如下面代码,两个个异步操作是并行执行的,等到它们都执行完后才会进到 then 里面。同时 all 会把所有异步操作的结果放进一个数组中传给 then。
//买作业本
function cutUp(){
console.log('挑作业本');
var p = new Promise(function(resolve, reject){ //做一些异步操作
setTimeout(function(){
console.log('挑好购买作业本');
resolve('新的作业本');
}, 1000);
});
return p;
}
//买笔
function boil(){
console.log('挑笔芯');
var p = new Promise(function(resolve, reject){ //做一些异步操作
setTimeout(function(){
console.log('挑好购买笔芯');
resolve('新的笔芯');
}, 1000);
});
return p;
}
Promise.all([cutUp(),boil()]).then(function(results){
console.log("写作业的工具都买好了");
console.log(results);
});
race()方法:
race 按字面解释,就是赛跑的意思。race 的用法与 all 一样,只不过 all 是等所有异步操作都执行完毕后才执行 then 回调。而 race 的话只要有一个异步操作执行完毕,就立刻执行 then 回调。
注意:其它没有执行完毕的异步操作仍然会继续执行,而不是停止。
这里我们将上面样例的 all 改成 race
Promise.race([cutUp(), boil()]).then(function(results){
console.log("哈哈,我先买好啦");
console.log(results);
});
如何使用?
使用场景:promise封装api接口
Promise进行异步操作
解决问题:1.回调多域问题2.多个并发请求