我用我的代码如下模式:Node.js的发电机“已经运行”引发错误的时候将自己
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();
哪里setTimeout
一些异步函数(例如数据库中读取或东西)。 这适用于浏览器内部,但是当我从node.js v 7.9.0开始为我的Sailsjs应用程序在摩卡集成测试 内运行它时,而不是显示My error message
,发生错误时(例如,当Sails在exec
上返回错误时),它显示Uncaught TypeError: Generator is already running
。快乐的情况下(即我拨打gen.next(something)
)没有问题。是什么赋予了?
而之前触发高兴旗的人跳:没有,当我得到的语法错误或不gen.throw
N,像this question其他错误,该行为是正确的 - 错误信息是适当的,堆栈跟踪指向右方地点。
看来,当我返回一个承诺,并从承诺'然后'或'catch'调用'gen.throw'时,一切正常。这只发生在通用回调中。 – Megakoresh