有一個函數需要調用不確定數量的其他(可能是異步)函數,每個函數都帶有回調函數,我正在使用以下模式。,使用回調執行多個異步函數的最佳實踐是什麼?
雖然很確定它是正確的,但不是很美觀。
// fn responsible for figuring out and calling aysnc funcs function fn(arg, outNext) { // calculate how many funcs we will be calling var waitCt = 0; var a, b, c; if(a = arg['a']) waitCt++; if(b = arg['b']) waitCt++; if(c = arg['c']) waitCt++; // call funcs if(a) fnArbitrary(arg.a, inNext); if(b) fnRandom(arg, inNext); if(c) fnClueless(15, inNext); // calback func function inNext(err) { // wait for one less func waitCt--; // return err if found if(err) outNext(err); // return nada if all funcs performed if(waitCt == 0) outNext(); // otherwise we're waiting for other funcs to finish return; } }
對我來說,似乎有必要採取兩個步驟:第一,看看有多少funcs中會被調用,第二個做的呼喚。但是也許我的大腦是從老派編程或者昨晚讀了太多李爾的東西而變得糟糕透頂。
不清楚您定義fa,fb和fc的位置。你能不能給你的函數發一個示例調用? – mamoo
@mamoo - fa,fb和fc是具有回調功能的任意函數,例如發佈或讀取數據庫。 (這裏的實際代碼非常大並且糾結) –