2012-07-27 18 views
6

Bitte entschuldigen Sie meine Neuigkeit mit dem Konzept der Versprechen. Ich verwende das Q-Modul in Node.js. Ich habe eine Funktion, die einen Callback aufrufen soll, nachdem sie alle notwendigen Schritte ausgeführt hat. Das Problem tritt auf, wenn ich die Rückruffunktion aus dem Q-Versprechen aufrufen möchte.Abbrechen einer Q-Versprechen in Node.js beim Ausführen eines Rückrufs?

Meine gewünschte Funktionalität ist es, den Callback aufrufen zu können, wenn ich den letzten Schritt erreiche und nicht mehr in der Kette der Versprechen bin. Somit wird der Rückruf zu seiner ursprünglichen Operation zurückkehren. Wie ich es jedoch codiert habe, wird der Callback im Rahmen des Versprechens aufgerufen. An dieser Stelle, sollte der Callback (sagen wir mal) einen Fehler werfen, wird er von dem Fehlerhandler in dieser Funktion abgefangen, was ich nicht will!

In diesem Zusammenhang verursacht ein Fehler innerhalb der Callback-Funktion "OHNOES !!!!!" gedruckt ....

Antwort

4

Es gibt ein Verfahren, werden nodeify, die (optional) werden aus einer Kette Versprechen brechen und sie auf eine NodeJS-Stil Fortsetzung.

var updateDataStream = function(data, input, posts, stream, callback) { 

    // Pack all the items up... 
    return Q.ncall(data._packStream, data, posts, stream) 
    // Upsert the cache into the database 
    .then(function(){ 
     return Q.ncall(data.upsert, data); 
    }) 
    // buffer the new input 
    .then(function(res){ 
     return Q.ncall(data.buffer, data, input); 
    }) 
    .nodeify(callback); 

} 

Note das addierte „return“ am Anfang der Kette und die „nodeify (Callback)“ am Ende hinzugefügt.

Ihre Benutzer müssen nicht wissen, dass Sie überhaupt Q verwenden ... es sei denn, sie verlassen den Rückruf, in diesem Fall erhalten sie stattdessen ein Versprechen.

Verwandte Themen