我收到错误:
bluebird.js:2118 Uncaught TypeError: generatorFunction must be a function
但是我不明白为什么会发生这个错误,因为我传递了一个generatorFunction。
export class Welcome {
fetch() {
Promise.coroutine(this.userData());
}
userData = function* getData() {
this.lotsData = yield this.testApi.getMock();
this.lotsData = JSON.stringify(this.lotsData, null, 4);
}
}
因此,click事件会调用fetch()并调用this.userData()。这是this.userData:
的控制台转储GeneratorFunctionPrototype {}
_invoke: invoke(method, arg)
__proto__: GeneratorFunctionPrototype
这告诉我它肯定是一个发电机。我在aurelia课程中使用所有这些,如果它以某种方式产生任何不同(我不应该认为)。那么为什么generatorFuction必须是一个函数呢?
答案 0 :(得分:3)
您发布的有限数量的代码存在错误,但是不足以知道什么是正确的,哪些是不正确的。
有一件事是肯定this.userData()
是一个函数调用而不是对函数的引用,这是.coroutine()
所期望的。
this.testApi.getMock()
返回的类型是yield
编辑的内容,我们根据您发布的内容不知道,但这可能在此时甚至不相关,因为返回的内容可能是无论如何unknown
/ null
,因为您要将yield
分配给可疑范围的变量。您的代码远不及文档中的示例
PingPong.prototype.ping = Promise.coroutine(function* (val) {
console.log("Ping?", val)
yield Promise.delay(500)
this.pong(val+1)
});
documentation有一个非常明确且定义明确的例子,你应该明确遵循,直到你明白你在做什么为止。