Generator funktioniert in Express mit Bluebird und Co

8

Ich probiere einige der Harmoniefunktionen in Knoten 0.12 aus, insbesondere die neue Generatorfunktion auszuprobieren. Ich mache das mit co (v4), bluebird und express (v4), etwa so:

%Vor%

Entsprechend seiner Dokumentation gibt co.wrap eine normale Funktion zurück, die eine Zusage aus der gegebenen Generatorfunktion zurückgibt.

Das funktioniert soweit, aber ich bin mir nicht sicher, ob a) Ich lecke Speicher, indem ich nicht auf das Ergebnis des zurückgegebenen Versprechens "warte" und b) Wenn ich eine Ausnahme in meiner Generatorfunktion verlieren könnte oder eines der Module, die von ihm verwendet werden.

Ist das ein guter Ansatz? Siehst du etwas falsch damit?

    
Matt 21.03.2015, 18:14
quelle

1 Antwort

10

Das Problem mit Ihrem Ansatz ist, dass wenn Ihre Generator-Funktion eine Ausnahme auslöst, diese nicht an die nächste Middleware weitergegeben wird. So wirst du es verlieren. Sie können die Promise.coroutine Funktion von bluebird verwenden, um Ihre eigenen zu implementieren einfach co wrapper, was gut in Express funktioniert:

%Vor%

UPD : Ich habe die Umsetzung etwas geändert. Jetzt berücksichtigt es die Anzahl oder Argumente, die an den Generator übergeben wurden: Wenn & gt; 3 Dann wird der Fehlerhandler verwendet, ansonsten - Request-Handler. Es ist wichtig für Express (schau im Quellcode hier und hier )

Jetzt können Sie es in Ihrem Code verwenden:

%Vor%

UPD Dies ist eine Lösung für Express mit Version & lt; = 4.x. Höchstwahrscheinlich werden 5.x Versprechungen unterstützen, so dass Sie einfach% blu_bird Promis.coroutine verwenden können, ohne etwas Besonderes zu sein Wrapper:

%Vor%     
alexpods 21.03.2015, 23:29
quelle