2014-03-19 6 views
9

Ich habe eine große node.js-Anwendung, die stark das Modul async.js verwendet.node.js async.js nextTick vs setImmediate

Ich habe eine Menge Code wie folgt aus:

async.series([ 
    function(callback){ 
     sql.update(query, callback); 
    }, 
    function(callback){ 
     if (something){ 
      sql.update(query2, callback); 
     } 
     else{ 
      callback(null); 
     } 
    } 

]);

Das große Problem ist der synchrone Rückruf in der Else-Anweisung. Ich habe vor einiger Zeit gelesen, dass Sie dies mit async.js nicht tun sollten, da dies zu unerwarteten Ergebnissen führen könnte, aber ich bin mir nicht sicher, was die beste Alternative ist. Ich lese, dass ich process.nextTick an einigen Stellen verwenden sollte, aber jetzt lese ich, dass wir das nicht verwenden sollten und es sollte gesetzt werden Sofort.

Kann mir jemand in die richtige Richtung zeigen? Vielen Dank!

+0

Können Sie einen Link zu dem, wo Sie lesen, dass Sie das nicht tun sollten? Ich habe kein Problem damit gesehen. Es ist die Art, wie async verwendet werden sollte. Wenn Sie mit der Ausführung der Funktion fertig sind, rufen Sie zurück. Die nachfolgende Funktion wird nicht ausgeführt, bis der Rückruf aufgerufen wird. –

+0

Ich wünschte ich könnte es finden. Ich habe es vor einer Weile gelesen. Ich weiß, dass der Rückruf aufgerufen werden muss, aber ich denke, dass es in einer der Funktionen enthalten sein sollte, die ich erwähne, um den Aufruf des Callbacks asynchron zu machen. Wir haben ein paar Kuriositäten. Nicht sicher, ob es von diesem oder etwas anderem stammt, aber ich dachte, ich würde alles entfernen, was ein Problem sein könnte. – Christie

+0

ich denke nicht, dass es die "falsche Richtung" ist .. das Problem sollte etwas anderes sein .. das erste Argument des 'Callback' sollte Null sein, wenn es keinen Fehler gibt sonst würde der' .series' Aufruf einfach mit dem beenden Error. versuche es mit 'console.trace()', Breakpoints und mehr Ausgaben zu debuggen. – Gntem

Antwort

6

Ich fand endlich die Referenz, ich erinnere mich, eine Weile zurück zu lesen.

Es ist auf dieser Seite: http://caolanmcmahon.com/posts/nodejs_style_and_structure/

Er bespricht den allgemeinen Fall in der Regel # 3 und in direkter Korrelation zu meinem Problem in Reaktion auf den ersten Kommentar auf der Seite.

Auch wenn es nicht die Ursache für meinen zufälligen Fehler ist, würde ich gerne das Modul nach den Absichten des Autors verwenden, was der Punkt der Frage war.

In diesem Artikel erwähnt er mit process.nextTick, aber ich glaube wirklich, Knoten aus, dass ich in diesem Fall zu bewegen versucht, und ich eine Antwort in einem Asynchron-Ausgabe-Thread von einem Monat gefunden, der sagt:

"Sie müssen sicherstellen, dass Ihre Funktionen asynchron ausgeführt werden - wenn Sie nicht wissen, ob es asynchron sein wird oder nicht, können Sie es mit setImmediate async sein"

Also, das ist die Antwort, die ich gehe mit. Ich werde alle Synch-Callbacks in setImmediate umschließen.

+2

Link broken BTW. – Dodekeract

Verwandte Themen