进讲对 Promise.race()和 Promise.all的理醉
时间: 2023-08-12 22:10:32 浏览: 52
当涉及到处理多个 Promise 对象时,`Promise.race()` 和 `Promise.all()` 是常用的方法。
`Promise.race()` 方法接收一个包含 Promise 对象的可迭代对象(比如数组),并返回一个新的 Promise 对象。这个新的 Promise 对象将会在可迭代对象中的第一个 Promise 对象解决(fulfilled)或拒绝(rejected)时解决或拒绝。换句话说,它会返回最快解决或拒绝的 Promise 对象的结果。例如:
```javascript
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('Promise 2 rejected');
}, 500);
});
Promise.race([promise1, promise2])
.then(result => {
console.log(result); // 输出: "Promise 2 rejected"
})
.catch(error => {
console.error(error);
});
```
在上面的示例中,`Promise.race()` 方法接收包含两个 Promise 对象的数组。`promise1` 在1秒后解决,而 `promise2` 在500毫秒后拒绝。由于 `promise2` 更快,所以返回的 Promise 对象将会拒绝,并输出 "Promise 2 rejected"。
相比之下,`Promise.all()` 方法接收一个包含 Promise 对象的可迭代对象,并返回一个新的 Promise 对象。这个新的 Promise 对象将会在可迭代对象中的所有 Promise 对象都解决时才解决,或者在任何一个 Promise 对象拒绝时拒绝。它会返回一个包含所有 Promise 对象解决结果的数组。例如:
```javascript
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 2 resolved');
}, 500);
});
Promise.all([promise1, promise2])
.then(results => {
console.log(results); // 输出: ["Promise 1 resolved", "Promise 2 resolved"]
})
.catch(error => {
console.error(error);
});
```
在上面的示例中,`Promise.all()` 方法接收包含两个 Promise 对象的数组。`promise1` 在1秒后解决,而 `promise2` 在500毫秒后解决。由于两个 Promise 对象都解决了,所以返回的 Promise 对象将会解决,并输出包含两个解决结果的数组 ["Promise 1 resolved", "Promise 2 resolved"]。
总结来说,`Promise.race()` 返回一个新的 Promise 对象,它在可迭代对象中的第一个 Promise 对象解决或拒绝时解决或拒绝;而 `Promise.all()` 返回一个新的 Promise 对象,它在可迭代对象中的所有 Promise 对象都解决时解决,或者在任何一个 Promise 对象拒绝时拒绝。