Ich probiere einige der Harmonie-Funktionen in Knoten 0.12, insbesondere das Ausprobieren der neuen Generatoren Feature. Ich tue dies mit Co (v4), drossel und Express (v4), etwa so:Generator-Funktionen in Express mit Bluebird und Co
// ...
var fs = bluebird.promisifyAll(require('fs'));
// ...
app.post('/test', co.wrap(function* (req, res, next) {
var contents = yield fs.readFileAsync('/etc/hosts', 'utf8');
return res.send(contents);
}));
// ...
Nach seiner Dokumentation, kehrt co.wrap eine normale Funktion, die ein Versprechen von der gegebenen Generatorfunktion zurückgibt .
Das funktioniert soweit, aber was ich nicht sicher bin, ist a) Ich lecke Speicher, indem ich nicht auf das Ergebnis des zurückgegebenen Versprechens "warte" und b) Wenn ich eine Ausnahme in meinem Generator verlieren könnte Funktion oder eines der von ihm verwendeten Module.
Ist das ein guter Ansatz? Siehst du irgendwas falsch damit?
Hat 'app.post' erwarten, dass das asynchrone Ergebnis Ihres Rückruf warten? – Bergi
app.post ist express 'app.post. Also, ich nehme an, es ist nicht (?) – Matt
Es ist sinnlos, 'co' zu verwenden, wenn du bluebird verwendest, da bluebird mit' Promise.coroutine' ausgeliefert wird, welches sowieso eine leistungsfähigere und robustere Version von 'co' ist. –