乐闻世界logo
搜索文章和话题

如何按顺序执行 promise 数组?

4 个月前提问
3 个月前修改
浏览次数29

1个答案

1

在处理多个异步操作时,按顺序执行 Promise 数组是一个常见的需求。这可以通过多种方式实现,如使用 async/await 语法,或者利用 Promisethen() 方法来串联执行。下面我将分别介绍这两种方法,并提供示例。

方法一:使用 async/await

async/await 是处理异步操作的现代方式,它可以让我们以同步的方式编写异步代码,从而使代码更加清晰和易于理解。利用这种方法,我们可以在一个 async 函数中用 for 循环遍历 Promise 数组,并在每次循环中用 await 等待 Promise 解决。

javascript
async 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 结合起来。

javascript
function 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 回复

你的答案