0

次のように関数をラップするかvar thunkedFunction = function(params) { return function(callback) { originalFunction(params, callback) }; )、node thunkify ライブラリを使用して、サンクによって Koa で動作するサードパーティの非同期関数を取得しました。

ただし、ntwitter のストリームでこれを試すと、次のようになります。

var streamThunk = thunkify(tw.stream);
var stream = yield streamThunk("statuses/filter", {track: track});

次のエラーが表示されます:「未定義のプロパティ stream_base を読み取れません」。

ntwitter (node-twitter 上に構築) をさらに掘り下げると、Twitter.prototype.stream 関数が this.options.stream_base を呼び出していることがわかります。また、this.options は、通常呼び出すと定義されます。つまりtw.stream(function(stream) {...});、関数をサンクすると未定義になります。サンク時に関数がスコープを失う理由はありますか?これを回避する方法はありますか?

4

1 に答える 1

3

オブジェクトthunkifyが表示されないことに注意してください。twしたがって、それが設計されている方法では、tw取得している関数のコンテキスト(あなたの場合)を知る方法がありません( tw.stream)。

によって返される関数は、呼び出されたコンテキストthunkifyを渡します (ソース: node-thunkify/index.js )。this

これは、例の 2 行目を次のように変更できることを意味します。

var stream = yield streamThunk.call(tw, "statuses/filter", {track: track});

についてもっと読むcall

于 2014-10-12T12:11:59.913 に答える