在处理多个异步操作时,按顺序执行 Promise 数组是一个常见的需求。这可以通过多种方式实现,如使用 async/await
语法,或者利用 Promise
的 then()
方法来串联执行。下面我将分别介绍这两种方法,并提供示例。
方法一:使用 async/await
async/await
是处理异步操作的现代方式,它可以让我们以同步的方式编写异步代码,从而使代码更加清晰和易于理解。利用这种方法,我们可以在一个 async
函数中用 for
循环遍历 Promise 数组,并在每次循环中用 await
等待 Promise 解决。
javascriptasync function sequentialStart(promises) { const results = []; for (const promise of promises) { const result = await promise(); results.push(result); } return results; } // 例子:定义三个异步任务 const promise1 = () => new Promise(resolve => setTimeout(() => resolve('结果1'), 1000)); const promise2 = () => new Promise(resolve => setTimeout(() => resolve('结果2'), 500)); const promise3 = () => new Promise(resolve => setTimeout(() => resolve('结果3'), 100)); // 使用函数 sequentialStart([promise1, promise2, promise3]).then(console.log); // 输出:["结果1", "结果2", "结果3"]
方法二:使用 then()
方法串联
在这种方法中,我们使用数组的 reduce()
方法来串联每个 Promise。初始值是一个已解决的 Promise,然后每一步都通过 then()
将之前的结果与下一个 Promise 结合起来。
javascriptfunction chainPromises(promises) { return promises.reduce((chain, currentPromise) => { return chain.then(chainResults => currentPromise().then(currentResult => [...chainResults, currentResult]) ); }, Promise.resolve([])); } // 使用相同的例子 chainPromises([promise1, promise2, promise3]).then(console.log); // 输出:["结果1", "结果2", "结果3"]
总结
这两种方法都能有效地按顺序执行 Promise 数组。async/await
方法提供了更简洁和直观的代码,而 then()
方法则是更传统的方式,也可以灵活处理更多的异步操作模式。在实际开发中可以根据具体情况选择适合的方法。
2024年6月29日 12:07 回复