Quelle est la manière correcte de la chaîne d'appels asynchrones en javascript?

J'essaie de trouver la meilleure façon de créer des appels asynchrones lors de chaque appel dépend du précédent appel d'avoir terminé. Pour le moment je suis le chaînage des méthodes de manière récursive d'appeler un processus défini en fonction comme illustré ci-dessous.

C'est ce que je suis en train de faire.

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

Je puis appeler cela comme suit

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

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

Alors que cela fonctionne parfaitement bien pour moi je ne peux pas aider mais pense qu'il y a mieux (plus simple). Ce qui se passe plus tard, lors de mes appels récursifs trop profondément?

NOTE: je ne suis pas à l'aide de javascript dans le navigateur, mais de manière native dans le Titane de cadre, cela s'apparente à du Javascript pour Node.js.

Avez-vous regardé dans les "promesses"? Ils peuvent s'adapter à nice. C'est une bibliothèque de la mettre en œuvre pour le Nœud.
Cette bibliothèque semble brillant pimvdb, je pense que je vais utiliser ce un.

OriginalL'auteur Brett Ryan | 2012-02-24