在一个循环中实现多个 promises 是一种常见的异步编程模式,通常用于处理一系列并发任务。以下是一些基础概念和相关信息:
async/await
可以使代码更加直观易读。以下是一个在循环中实现多个 promises 的示例,展示了如何并行执行多个异步任务:
async function runPromisesInParallel(tasks) {
try {
// 使用 Promise.all 并行执行所有任务
const results = await Promise.all(tasks.map(task => task()));
console.log('All tasks completed successfully:', results);
} catch (error) {
console.error('One or more tasks failed:', error);
}
}
// 示例任务函数
function createTask(id) {
return () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id % 2 === 0) {
resolve(`Task ${id} completed`);
} else {
reject(new Error(`Task ${id} failed`));
}
}, 1000);
});
};
}
// 创建一组任务
const tasks = [createTask(1), createTask(2), createTask(3), createTask(4)];
// 运行任务
runPromisesInParallel(tasks);
runPromisesInParallel
函数:tasks
。Promise.all
并行执行所有任务。createTask
函数:setTimeout
模拟耗时操作。原因: Promise.all
会在任何一个 promise 被拒绝时立即抛出错误,导致其他正在进行的任务被中断。
解决方法: 使用 Promise.allSettled
替代 Promise.all
,它会等待所有 promises 都完成(无论是成功还是失败),然后返回所有结果。
async function runPromisesWithAllSettled(tasks) {
try {
const results = await Promise.allSettled(tasks.map(task => task()));
console.log('All tasks settled:', results);
} catch (error) {
console.error('Unexpected error:', error);
}
}
通过这种方式,即使某些任务失败,其他任务仍然会继续执行,并且你可以分别处理每个任务的结果。
希望这些信息对你有所帮助!如果有更多具体问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云