我有一个异步函数,它可能调用或不调用其他异步函数,并且应该在完成所有子函数时调用它的回调函数。 我对我的想法感到不满意,觉得应该有一个更简单的方法。这样做的正确方法是什么(没有库)?
function fn(callback)
{
let pendingOperations = 0;
if (condition1)
{
++pendingOperations;
}
if (condition2)
{
++pendingOperations;
}
if (pendingOperations === 0)
{
callback();
}
else
{
if (condition1)
{
otherFunction1(() =>
{
if (--pendingOperations <= 0)
{
callback();
}
});
}
if (condition2)
{
otherFunction2(() =>
{
if (--pendingOperations <= 0)
{
callback();
}
});
}
}
}
答案 0 :(得分:0)
使用Promise
s进行此类工作:
function fn(callback) {
let promises = [];
if (condition1) {
promises.push(new Promise(resolve => otherFunction1(resolve)));
}
if (condition2) {
promises.push(new Promise(resolve => otherFunction2(resolve)));
}
Promise.all(promises).then(callback);
}
如果promises
为空(由于condition1
和condition2
失败),则Promise.all(promises)
返回的承诺将立即得到解决,因此callback
立即打电话。