JavaScript 中的 Promise.all 和 Promise.race 是两个非常实用的函数,它们都用于处理多个 Promise 对象,但使用场景和作用有所不同。
Promise.all 是一个函数,它接收一个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 会在数组中的所有 Promise 对象都完成时才标记为完成。如果数组中有一个 Promise 对象失败,新的 Promise 对象就会立即标记为失败。这个函数可以用来处理多个异步操作,并且只有当所有的操作都成功时,才会返回结果。
下面是一个使用 Promise.all 的例子:
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'promise1');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'promise2');
});
Promise.all([promise1, promise2]).then((values) => {
console.log(values); // ['promise1', 'promise2']
});
在这个例子中,我们创建了两个 Promise 对象,分别表示两个异步操作。我们使用 Promise.all 将它们组合成一个新的 Promise 对象。新的 Promise 对象会在两个操作都完成时才完成,并且返回两个操作的结果。
Promise.race 也是一个函数,它接收一个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。新的 Promise 对象会在数组中的任何一个 Promise 对象完成或失败时,就立即标记为完成或失败。这个函数可以用来处理多个异步操作,只要有一个操作完成或失败,就会立即返回结果。
下面是一个使用 Promise.race 的例子:
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'promise1');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(reject, 1000, 'promise2');
});
Promise.race([promise1, promise2]).then((value) => {
console.log(value); // 'promise1'
});
在这个例子中,我们创建了两个 Promise 对象,分别表示两个异步操作。我们使用 Promise.race 将它们组合成一个新的 Promise 对象。新的 Promise 对象会在第一个操作完成或失败时,就立即完成或失败。在这个例子中,第一个操作在 500 毫秒后完成,因此新的 Promise 对象会在 500 毫秒后标记为完成,并返回第一个操作的结果。
总的来说,Promise.all 和 Promise.race 的区别在于它们的行为不同。Promise.all 需要所有的操作都成功时才返回结果,而 Promise.race 只要有一个操作完成或失败就会立即返回结果。因此,在处理多个异步操作时,可以根据实际需求选择使用 Promise.all 或 Promise.race。