我有一个异步函数,调用了其他异步函数,当它们全部完成时,我返回结果。如何在异步函数中有很多回调时正确返回值
我不想使用Promise.all
,因为如果这些功能失败,我只是不会将它们添加到我的结果中。
ATM我的代码看起来像这样。它的工作原理,但我不喜欢new Promise
,我想在ES6异步的方式做到这一点,所以callAll功能应该像const callAll = async (query) => {
const callAll = (query) => {
return new Promise((resolve, reject) => {
const results = [];
const jobs = [
{
promise: someModuleFirst.search(query),
done: false
},
{
promise: someModuleSecond.search(query),
done: false
},
{
promise: someModuleThird.search(query),
done: false
}
];
const areAllDone =() => {
if(!jobs.filter((job) => !job.done).length) {
return true;
}
};
jobs.forEach((job) => {
job.promise.then((result) => {
job.done = true;
results.push(result);
if(areAllDone()) {
resolve(results);
}
}).catch((error) => {
job.done = true;
if(areAllDone()) {
resolve(results);
}
});
});
});
};
你检查过'async'模块吗?它会为您节省大量的头部划伤 – borislemke
@borislemke async.parallel似乎并不接受承诺在第一次参数,我不想做任何奇怪的黑客,并将承诺转换为回调,我试图使代码尽可能好 – xerq