等待机制(Promise.all): 使用 Promise.all 方法可以同时等待多个 Promise 对象的完成。只有当所有的 Promise 都成功解析时,返回的 Promise 才进入 resolved 状态,将每个 Promise 的解析结果以数组形式传递给 then() 方法;如果任何一个 Promise 失败拒绝,则返回的 Promise 会进入 rejected 状态,并传递第一个失败的 Promise 的拒绝原因给 catch() 方法。
const promise1 = Promise.resolve('Success 1');
const promise2 = Promise.resolve('Success 2');
const promise3 = Promise.resolve('Success 3');
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results); // ['Success 1', 'Success 2', 'Success 3']
})
.catch((error) => {
console.error(error);
});
在上述示例中,使用 Promise.all 方法同时等待三个 Promise 对象的完成。由于每个 Promise 都成功解析,返回的 Promise 进入 resolved 状态,并将每个 Promise 的解析结果以数组形式传递给 then() 方法。
赛跑机制(Promise.race): 使用 Promise.race 方法可以监听多个 Promise 对象中最先解决或拒绝的那一个,并返回对应的 Promise。无论是被解析还是被拒绝,Promise.race 方法都会返回第一个完成的 Promise 结果或错误。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 2000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Promise 2 rejected'));
}, 1000);
});
Promise.race([promise1, promise2])
.then((result) => {
console.log(result); // 'Promise 2 rejected'
})
.catch((error) => {
console.error(error); // Error: Promise 2 rejected
});
在上述示例中,使用 Promise.race 方法监听两个 Promise 对象。即使 promise1 的解析时间更长,但是由于 promise2 先于 promise1 被拒绝,返回的 Promise 进入 rejected 状态,并将 promise2 的拒绝原因传递给 catch() 方法。