注意:以下不同例子代码setTimeout时间可能不同
Promise.all()
- 接收一个数组,返回一个结果数组
- 只要其
中一个失败了,promise.all将立即变为失败,但是不会终止没执行完的 全部fulfilled,promise.all才变成fulfilled,类似&&(与)操作符号
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'one');
});
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
let p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'three');
});
let p4 = new Promise((resolve, reject) => {
reject('reject');
});
let p5 = new Promise((resolve, reject) => {
console.log(2); // 2 p4 reject了,p5还继续执行
setTimeout(resolve, 4000, 'four');
});
let p6 = new Promise((resolve, reject) => {
console.log(6); // 6 p4 reject了,p6还继续执行
setTimeout(resolve, 5000, 'six');
});
Promise.all([p1, p2, p3, p4, p5,p6]).then(values => {
console.log(values);
}, reason => {
console.log(reason)
});
输出: 2 6 reject
Promise.any()
- 接收一个数组,返回单个结果
- 只要其中一个成功了,promise.any将立即变为fulfilled,但是不会终止没执行完的,遇到失败的,不变更状态,继续寻找成功的
- 只有全部 rejected,promise.any才变成rejected,类似 ||(或)操作符号
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 7000, 'one');
});
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
let p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'three');
});
let p4 = new Promise((resolve, reject) => {
reject('reject');
});
let p5 = new Promise((resolve, reject) => {
console.log(2); // 2 p4 reject了,p5还继续执行
setTimeout(resolve, 4000, 'four');
});
let p6 = new Promise((resolve, reject) => {
console.log(6); // 6 p4 reject了,p6还继续执行
setTimeout(resolve, 5000, 'six');
});
//You can also use .catch
Promise.any([p1, p2, p3, p4, p5,p6]).then(values => {
console.log(values);
}).catch(reason => {
console.log(reason)
});
输出:2 6 two
Promise.race()
- 接收一个数组,返回单个结果
- 并不管fulfilled或者rejected,只要promise执行状态最先变更,就会Promise.race就会解决或拒绝。
- 并不会终止其他promise的执行
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'one');
});
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
let p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'three');
});
let p4 = new Promise((resolve, reject) => {
reject('reject');
});
let p5 = new Promise((resolve, reject) => {
console.log(2); // 2 p4 reject了,p5还继续执行
setTimeout(resolve, 4000, 'four');
});
let p6 = new Promise((resolve, reject) => {
console.log(6); // 6 p4 reject了,p6还继续执行
setTimeout(resolve, 5000, 'six');
});
//You can also use .catch
Promise.race([p1, p2, p3, p4, p5,p6]).then(values => {
console.log(values);
}).catch(reason => {
console.log(reason)
});
输出:2 6 reject
Promise.allSettled()
- 接收一个数组,返回数组对象结果,并且结果是有序的,因为它接收的是已经fulfilled或rejected后的 promise
- 并不管promise是fulfilled还是rejected,Promise.allSettled都是fulfilled
- 会把所有的promise执行完
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 5000, 'one');
});
let p2 = new Promise((resolve, reject) => {
reject('reject');
});
let p3 = new Promise((resolve, reject) => {
console.log(2); // 2 p2 reject了,p3还继续执行,并且使用
setTimeout(resolve, 4000, 'four');
});
//You can also use .catch
Promise.allSettled([p1, p2, p3]).then(values => {
console.log(values);
}).catch(reason => {
console.log(reason)
});
输出:2 [ { status: 'fulfilled', value: 'one' }, { status: 'rejected', reason: 'reject' }, { status: 'fulfilled', value: 'four' } ]
Promise.resolve()
- 接收一个参数,并且把这个参数包装成promise返回
let p1 = Promise.resolve(1);
console.log(p1); // Promise { 1 }
输出:Promise { 1 }
Promise.reject(reason);
- 返回一个给定原因了的被拒绝的
Promise。
let p1 = Promise.reject(1);
p1.then(()=>{
}).catch((err)=>{
console.log(err); // 1
})
输出:1