0

我已经通过 thunking 获得了一些第三方异步函数来与 Koa 一起使用,或者像这样包装函数:var thunkedFunction = function(params) { return function(callback) { originalFunction(params, callback) }; )或者使用节点 thunkify 库。

但是,当我像这样尝试使用 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将传递this它调用的任何上下文(来源:node-thunkify/index.js)。

这意味着您应该能够将示例中的第二行更改为:

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

阅读更多关于call.

于 2014-10-12T12:11:59.913 回答