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?
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:
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:
Tags und Links javascript node.js generator ecmascript-6 promise