Коа и твиттер - "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,

Другие вопросы по тегам