Was ist der richtige Weg, um die Kette asynchrone Aufrufe in javascript?

Ich bin versuchen zu finden der beste Weg zum erstellen asynchroner Aufrufe bei jedem Aufruf richtet sich an die Vorherige Aufruf beendet haben. Im moment bin ich die Verkettung der Methoden durch den rekursiven Aufruf einen definierten Prozess, der Funktion, wie unten dargestellt.

Dies ist, was ich bin derzeit dabei.

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();
        }
    }
})();

Ich würde dann rufen Sie diese wie folgt

var log = function(message) {
    //Impl removed.
}

syncProduct.start(function() {
    log("Product Sync Complete!");
}, log);

Während dies funktioniert völlig in Ordnung für mich, ich kann nicht helfen, aber denke, es muss einen besseren (einfacheren) Weg. Was passiert später, wenn mein rekursive Aufrufe zu tief?

HINWEIS: ich bin nicht mit javascript in dem browser, sondern direkt in das Titanium-framework, das ist vergleichbar mit Javascript für Node.js.

InformationsquelleAutor der Frage Brett Ryan | 2012-02-24

Schreibe einen Kommentar