蓝鸟错误:生成器函数必须是函数

时间:2016-05-23 22:38:35

标签: javascript promise generator bluebird

我收到错误:

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必须是一个函数呢?

1 个答案:

答案 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有一个非常明确且定义明确的例子,你应该明确遵循,直到你明白你在做什么为止。