在 JavaScript 中,可以使用 Promise.all 和 Promise.race 方法来进行异步编程。
Promise.all 方法接收一个由 Promise 对象组成的数组作为参数,并且返回一个新的 Promise 对象。该 Promise 对象在数组中所有 Promise 对象都已经 resolved 时 resolve,并且它的结果是一个数组,包含了数组中所有 Promise 对象的 resolve 结果。
下面是一个使用 Promise.all 方法的例子:
const promise1 = Promise.resolve("Hello");
const promise2 = Promise.resolve("World");
const promise3 = Promise.resolve("!");
Promise.all([promise1, promise2, promise3])
.then(([result1, result2, result3]) => {
console.log(result1 + result2 + result3); // 输出 "HelloWorld!"
})
.catch((error) => {
console.error(error);
});
在上面的例子中,我们创建了三个 Promise 对象,并且将它们作为数组的元素传递给 Promise.all 方法。当所有 Promise 对象都已经 resolved 时,Promise.all 返回一个新的 Promise 对象,并且它的 resolve 结果是一个数组,包含了所有 Promise 对象的 resolve 结果。
Promise.race 方法也接收一个由 Promise 对象组成的数组作为参数,并且返回一个新的 Promise 对象。但是 Promise.race 方法的处理方式有所不同,它会在数组中的任意一个 Promise 对象 resolved 或者 rejected 时,返回一个新的 Promise 对象并且执行对应的处理函数。
下面是一个使用 Promise.race 方法的例子:
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("Hello"), 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("World"), 2000);
});
Promise.race([promise1, promise2])
.then((result) => {
console.log(result); // 输出 "Hello"
})
.catch((error) => {
console.error(error);
});
在上面的例子中,我们创建了两个 Promise 对象,并且将它们作为数组的元素传递给 Promise.race 方法。由于第一个 Promise 对象在 1 秒后就 resolved,而第二个 Promise 对象需要 2 秒才能 resolved,因此 Promise.race 方法返回一个新的 Promise 对象,并且它的 resolve 结果是第一个 Promise 对象的 resolve 结果。
需要注意的是,如果数组中的任意一个 Promise 对象被 rejected,那么 Promise.race 方法就会返回一个新的 Promise 对象并且执行 catch 方法。