异步处理多个 Promise
本文旨在解决在循环内执行多个异步任务的挑战以及确保其完成的需要在继续后续任务之前。
想象一个场景,其中循环迭代一组任务,每个任务都是异步执行的。在该循环之后,另一个循环依赖于第一个循环任务的完成。我们怎样才能有效地实现这种协调?
Promises 为这个问题提供了一个优雅的解决方案。通过从 doSomeAsyncStuff() 返回一个 Promise,我们可以管理异步操作。
Promise.all() 是一个强大的方法,它接受一组 Promise 并返回单个 Promise。只有当所有输入的 Promise 都得到解决或者其中任何一个被拒绝时,这个单一的 Promise 才会得到解决。
为了实现我们的目标,我们可以利用 Promise.all() 如下:
const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomeAsyncStuff()); } Promise.all(promises) .then(() => { // Execute tasks that require all async tasks to finish }) .catch((e) => { // Handle errors });
在此实现中,我们将所有 Promise 收集到一个数组中并将其传递给 Promise.all()。在解决(或拒绝)后,我们继续执行第二个循环的任务。
以下示例演示了如何利用 Promise.all() 等待多个异步任务完成完成:
function doSomethingAsync(value) { return new Promise((resolve) => { setTimeout(() => { console.log("Resolving " + value); resolve(value); }, Math.floor(Math.random() * 1000)); }); } function test() { const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomethingAsync(i)); } Promise.all(promises) .then((results) => { console.log("All done", results); }) .catch((e) => { // Handle errors }); } test();
以上是Promise.all() 如何高效处理多个异步任务,然后再进行后续操作?的详细内容。更多信息请关注PHP中文网其他相关文章!