Коа и твиттер - "Thunking" не работает
Я получил некоторые сторонние асинхронные функции для работы с Koa через thunking, либо обернув функцию следующим образом: 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) {...});
но не определено, когда я одобряю функцию. Есть ли какая-либо причина, по которой функция теряет свою область действия, когда есть thunked, и есть ли способ обойти это?
1 ответ
Заметить, что thunkify
не видит tw
объект. Таким образом, способ, которым это разработано, у этого нет никакого способа знать контекст (tw
в вашем случае) функции она получает (tw.stream
).
Функция, возвращаемая thunkify
пройдет вдоль всего this
контекст, с которым он вызывается ( source: node-thunkify / index.js).
Это означает, что вы должны иметь возможность изменить вторую строку в вашем примере на:
var stream = yield streamThunk.call(tw, "statuses/filter", {track: track});
Узнайте больше оcall
,