wirft ich das folgende Muster verwenden in meinem Code:Node.js Generator „bereits ausgeführt“, wenn Fehler selbst
let gen = (function*(){
let foo = yield setTimout((err, something)=> err ? gen.throw(err) : gen.next(something), 1000, new Error('My error message'), null);
console.log(foo);
})();
gen.next();
Wo setTimeout
einig Asynchron-Funktion (zum Beispiel Datenbank holen oder etwas). Dies funktioniert innerhalb des Browsers, aber wenn ich es innerhalb eines Mocha-Integrationstests für meine Sailsjs-App von node.js v 7.9.0 starte, anstatt My error message
anzuzeigen, wenn der Fehler auftritt (zB wenn Sails einen Fehler auf exec
zurückgibt), Es wird Uncaught TypeError: Generator is already running
angezeigt. Happy Case (d. H. Wenn ich gen.next(something)
anrufen) funktioniert ohne Probleme. Was gibt?
Und vor schießfreudigen Flagge Menschen springen in: nein, wenn ich Syntaxfehler oder andere Fehler auftreten, die nicht gen.throw
n sind, wie in this question, das Verhalten ist korrekt - Fehlermeldung ist angemessen und Stack-Trace zeigt nach rechts Ort.
Es scheint, dass, wenn ich ein Versprechen zurückgebe und 'gen.Twurk' aus dem Versprechen' then' oder 'catch' nenne, alles gut geht. Dies geschieht nur in generischen Callbacks. – Megakoresh