- 并行执行
并行执行是同时运行多个异步任务的过程,利用JavaScript的非阻滞性质来提高性能。
Promise.all([
Promise.resolve('Success 1'),
Promise.resolve('Success 2'),
])
.then((result) => {
console.log(result); // ['Success 1', 'Success 2']
})
Promise.all()
方法将一系列承诺作为输入,并返回一个新的承诺,当数组中的所有承诺都解决时,可以通过一系列结果解决。
ð序列执行
我们可能需要按照特定顺序执行多个异步任务,其中一个任务的结果取决于上一个任务的结果。可以将承诺束缚在一起以处理异步操作的顺序执行。
promise1
.then((result1) => {
console.log('result from 1 api', result1)
return promise2;
})
.then((result2) => {
console.log('result from 2 api', result2);
});
- 首先实现的诺言
有时,您可能需要在实现几个诺言之一的一项。
Promise.race([
Promise.reject('Error 1'),
Promise.resolve('Success 1'),
Promise.reject('Error 2'),
]).then((result) => {
console.log(result); // won't reach
})
.catch((error) => {
console.error(error); // Error 1
});
Promise.race()
解决或拒绝第一个解决或拒绝承诺的价值或原因。
ð首次成功执行
我们可能需要等待一系列承诺的第一个解决承诺。
const promises = [
Promise.reject('Error 1'),
Promise.resolve('Success 1'),
Promise.reject('Error 2'),
];
Promise.any(promises)
.then((result) => {
console.log(result); // "Success 1"
})
.catch((error) => {
console.error(error); // AggregateError: All Promises were rejected
});
Promise.any()
函数可以根据第一个解决的承诺结果解决,忽略了任何拒绝。这样,我们确保链条以第一个解决的承诺的结果继续。
所有状态
我们可能需要执行多个承诺,无论其个人结果如何
const promises = [
Promise.resolve('Success 1'),
Promise.reject('Error 1'),
Promise.resolve('Success 2'),
];
Promise.allSettled(promises)
.then((results) => {
console.log(results);
/*
[
{ status: "fulfilled", value: "Success 1" },
{ status: "rejected", reason: "Error 1" },
{ status: "fulfilled", value: "Success 2" },
]
*/
});
Promise.allSettled()
方法返回一个承诺,该承诺用代表每个输入承诺状态的对象来解决。