私は非同期呼び出しを作成する最も良い方法は、各呼び出しが以前の呼び出しが完了したかどうかに依存しているときに見つけようとしています。現時点では、以下に示すように定義されたプロセス関数を再帰的に呼び出すことによってメソッドを連鎖させています。javascriptで非同期呼び出しをチェーンする正しい方法は何ですか?
これは私が現在行っていることです。
var syncProduct = (function() {
var done, log;
var IN_CAT = 1, IN_TITLES = 2, IN_BINS = 3;
var state = IN_CAT;
var processNext = function(data) {
switch(state) {
case IN_CAT:
SVC.sendJsonRequest(url("/api/lineplan/categories"), processNext);
state = IN_TITLES;
break;
case IN_TITLES:
log((data ? data.length : "No") + " categories retrieved!");
SVC.sendJsonRequest(url("/api/lineplan/titles"), processNext);
state = IN_BINS;
break;
case IN_BINS:
log((data ? data.length : "No") + " titles retrieved!");
SVC.sendJsonRequest(url("/api/lineplan/bins"), processNext);
state = IN_MAJOR;
break;
default:
log((data ? data.length : "No") + " bins retrieved!");
done();
break;
}
}
return {
start: function(doneCB, logCB) {
done = doneCB; log = logCB; state = IN_CAT;
processNext();
}
}
})();
これが私のために完全に正常に動作している間、私は助けるが、よりよい(単純な)方法がなければならないと考えることはできません
var log = function(message) {
// Impl removed.
}
syncProduct.start(function() {
log("Product Sync Complete!");
}, log);
を次のように私は、これを呼び出します。再帰呼び出しが深すぎると後で何が起こるのですか?
:私はブラウザでjavacriptを使用していませんが、ネイティブにTitaniumフレームワーク内で使用しています。これはNode.jsのJavascriptに似ています。
「約束」を調べましたか?彼らは素敵に合うかもしれません。 [これはNode用に実装されたライブラリです(https://github.com/kriskowal/q)。 – pimvdb
そのライブラリは素晴らしいpimvdbに見えますが、私はこれを使用していると思います。 –