【发布时间】:2017-06-04 19:41:00
【问题描述】:
我在我的代码中使用以下模式:
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 是一些异步函数(例如数据库获取或其他东西)。
这在浏览器中有效,但是当我在 mocha 集成测试中运行它时
对于我的来自 node.js v 7.9.0 的 Sailsjs 应用程序,当错误发生时(例如,当 Sails 在exec 返回错误时)而不是显示My error message,它显示Uncaught TypeError: Generator is already running。快乐案例(即当我打电话给gen.next(something) 时)可以正常工作。什么给了?
在触发快乐标志之前人们跳入:不,当我收到语法错误或其他不是gen.thrown 的错误时,例如在this question 中,行为是正确的 - 错误消息是适当的并且堆栈跟踪点到正确的地方。
【问题讨论】:
-
看来,当我返回一个承诺并从承诺
then或catch调用gen.throw时,一切正常。这只发生在通用回调中。
标签: javascript node.js sails.js mocha.js