私の具体的な問題は、バッチファイルのようなものを準備するために(潜在的に)多数のJavascript関数を実行する必要があることです(各関数呼び出しは同じバッチファイルにいくつかの情報を追加します)。バッチ ファイルを送信する最終関数 (たとえば、HTML 応答として送信)。このための一般的な Javascript プログラミング パターンを探しています。
問題の一般化: Javascript 関数 funcA()、funcB()、および funcC() が与えられた場合、funcA および funcB が実行された後にのみ funcC が実行されるように、実行を順序付ける最良の方法を見つけ出します。次のようにネストされたコールバック関数を使用できることを知っています。
funcA = function() {
//Does funcA stuff
funcB();
}
funcB = function() {
//Does funcB stuff
funcC();
}
funcA();
コールバック パラメータを渡すことで、このパターンをもう少し一般的なものにすることもできますが、この解決策は非常に冗長になります。
また、ソリューションが次のようになる Javascript 関数チェーンにも精通しています。
myObj = {}
myObj.answer = ""
myObj.funcA = function() {
//Do some work on this.answer
return this;
}
myObj.funcB = function() {
//Do some more work on this.answer
return this;
}
myObj.funcC = function() {
//Use the value of this.answer now that funcA and funcB have made their modifications
return this;
}
myObj.funcA().funcB().funcC();
このソリューションは私には少しすっきりしているように見えますが、計算にステップを追加すると、関数実行のチェーンがどんどん長くなります。
私の特定の問題では、funcA、funcB などが実行される順序は重要ではありません。したがって、上記のソリューションでは、すべての機能を順番に並べているため、技術的に必要以上の作業を行っています。私にとって重要なのは、funcA と funcB がすべて実行を完了した後にのみ、funcC (結果を送信したり、要求を開始したりするための関数) が呼び出されることです。理想的には、funcC は何らかの方法ですべての中間関数呼び出しをリッスンして完了し、THEN を実行できますか? このような問題を解決するための一般的な Javascript パターンを学びたいと思っています。
ご協力いただきありがとうございます。
別のアイデア: 共有オブジェクトを funcA と funcB に渡し、実行が完了したら、sharedThing.funcA = "complete" または sharedThing.funcB = "complete" のように共有オブジェクトをマークしてから、どうにかしてください。共有オブジェクトがすべてのフィールドが完了とマークされた状態に達したときに funcC を実行します。funcC にこれを待機させる方法が正確にわかりません。
編集:私はサーバー側のJavascript(Node.js)を使用していることに注意する必要があります.JQueryや他のライブラリを使用せずに、単純な古いJavascriptを使用して解決するパターンを学びたいと思います. 確かに、この問題は十分に一般的であり、きれいな純粋な Javascript ソリューションがあるのでしょうか?