可以使用Promise.all
方法来等待并行函数完成。Promise.all
接收一个数组,包含所有需要并行执行的函数,返回一个新的Promise对象。这个新的Promise对象将在所有并行函数都完成后被解析,并且解析的结果是一个包含所有函数结果的数组。
以下是一个使用Promise.all
解决“async.parallel
不会等待并行函数完成”的示例代码:
const async = require('async');
function parallelFunction1(callback) {
setTimeout(() => {
console.log('Parallel Function 1 executed');
callback(null, 'Result 1');
}, 2000);
}
function parallelFunction2(callback) {
setTimeout(() => {
console.log('Parallel Function 2 executed');
callback(null, 'Result 2');
}, 1000);
}
function parallelFunction3(callback) {
setTimeout(() => {
console.log('Parallel Function 3 executed');
callback(null, 'Result 3');
}, 1500);
}
// 使用Promise.all来等待并行函数完成
function executeParallelFunctions() {
const parallelFunctions = [
parallelFunction1,
parallelFunction2,
parallelFunction3
];
const promises = parallelFunctions.map(fn => new Promise((resolve, reject) => {
fn((error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
}));
Promise.all(promises)
.then(results => {
console.log('All parallel functions completed');
console.log('Results:', results);
})
.catch(error => {
console.error('Error:', error);
});
}
executeParallelFunctions();
在这个示例中,parallelFunction1
、parallelFunction2
和parallelFunction3
是三个需要并行执行的函数。executeParallelFunctions
函数里使用Promise.all
来等待这三个函数的执行结果。
运行以上代码,输出如下:
Parallel Function 2 executed
Parallel Function 1 executed
Parallel Function 3 executed
All parallel functions completed
Results: [ 'Result 1', 'Result 2', 'Result 3' ]
可以看到,使用Promise.all
确保了并行函数都完成后再继续下一步操作,且最终的结果包含所有函数的结果。
上一篇:async.parallel()和Promise.all()的使用差异是什么?它们可以互相替换吗?
下一篇:Async.Parallel不运行 list |> Async.Parallel |> Async.Ignore |> Async.Start。