2016-05-23 9 views
-2

私はエラーを取得していなければなりません:ブルーバードエラー:ジェネレータ関数は、関数

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クラスでこの全てを使っています(それは私が思うべきではないはずです)。ではなぜgeneratorFuctionは関数でなければならないのですか?

+0

投げられたエラーはどの行番号ですか? – 2426021684

+0

bluebird.js:2118 – allencoded

+1

デバッグヘルプ(「なぜこのコードは機能していませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。 [参照:最小限で完全で検証可能な例を作成する方法](http://stackoverflow.com/help/mcve) –

答えて

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はあなたがあなたが実際に何をしているかを理解し、明示的になるまで、従わなければならない非常に明確かつ明確に定義された例がある文書から例の近くにどこにもありません。

+0

あなたの意見があります。私はもう少しそれを試してみるつもりです。 – allencoded

+0

実際は 'this.testApi.getMock()'が動作します。インポートされたばかりのクラスでフェッチから約束を返します。 'Promise.coroutine(this.userData());以外のもの;'他に何があるのか​​よくわかりません。私自身の発電機ランナーを書くなら、それをうまく動作させることができます。私はカスタム発電機ランナーの代わりにブルーバードを使用しようとしていました。 – allencoded

関連する問題