Bluebird Error: Generator Function Must Be A Function

Bluebird Error: Generator Function Must Be A Function

我收到错误:

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);
    }
}

所以单击事件调用 fetch(),然后调用 this.userData()。这是 this.userData:

的控制台转储
GeneratorFunctionPrototype {}
_invoke: invoke(method, arg)
__proto__: GeneratorFunctionPrototype

这告诉我它肯定是一台发电机。我正在 aurelia class 中使用所有这些,如果这有什么不同的话(我不认为它不应该)。那么,为什么会错误地认为 generatorFuction 必须是一个函数?

您发布的有限数量的代码充满了错误,但还不足以知道什么是正确的,什么是不正确的。

有一件事是肯定的 this.userData() 是一个函数 call 而不是对函数的引用,这正是 .coroutine() 所期望的。

this.testApi.getMock() 返回的任何类型都是正在 yielded 的类型,我们不知道您发布的内容,但目前可能甚至不相关,因为返回的是什么可能是 unknown/null 无论如何,因为您正在将 yield 分配给一个有问题范围的变量。您的代码与文档中的示例相去甚远

PingPong.prototype.ping = Promise.coroutine(function* (val) {
    console.log("Ping?", val)
    yield Promise.delay(500)
    this.pong(val+1)
});

documentation 有一个非常清晰和定义明确的示例,您应该遵循,明确地直到您理解您实际在做什么。