Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
一个 Promise 必然处于以下几种状态之一:
- 等待(pending) : 初始状态,既没有被兑现,也没有被拒绝。
- 成功(fulfilled) : 意味着操作成功完成。
- 失败(rejected) : 意味着操作失败。
promise.all
let wake = (time) => {
return new Promise(function (resolve, reject) {
resolve(`${time / 1000}后醒来`);
});
};
let p1 = wake1(1000);
let p2 = wake(500);
Promise.all([p1,p2]).then(res=>{
let [res1,res2]=res;
console.log(res1,'res1');
console.log(res2,'res2');
}).catch(err=>{
console.log(err);
})
-
如果传入的参数是一个空的可迭代对象,则返回一个已完成(already resolved) 状态的
Promise -
如果传入的参数不包含任何
promise,则返回一个异步完成(asynchronously resolved)Promise。注意:Google Chrome 58 在这种情况下返回一个已完成(already resolved) 状态的Promise。 -
其它情况下返回一个处理中(pending) 的
Promise。这个返回的promise之后会在所有的promise都完成或有一个promise失败时异步地变为完成或失败。 见上方关于“Promise.all 的示例。返回值将会按照参数内的promise顺序排列,而不是由调用promise的完成顺序决定。
promise.race
let wake1 = (time) => {
return new Promise(function (resolve, reject) {
reject(`${time / 1000}后失败`);
});
};
let wake2 = (time) => {
return new Promise(function (resolve, reject) {
resolve(`${time / 1000}后醒来`);
});
};
let p1 = wake1(500);
let p2 = wake2(10000);
Promise.race([p1, p2])
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
- 只要给定的迭代中的一个promise解决或拒绝,就采用第一个promise的值作为它的值,从而异步地解析或拒绝(一旦堆栈为空)。
总结
- promise.all: 只有参数里面的promise全部成功,才会触发成功(返回结果按照参数顺序),一旦有一个异常,就返回失败
- promise.race:谁先结束就先返回