2
Я пытаюсь реализовать асинхронную очередь метода в JavaScript, как показано в this blog postАсинхронный очередь метод Javascript
Вот что я до сих пор:
function Queue() {
this._methods = [];
this._response = null;
this._flushed = false;
}
(function(Q){
Q.add = function (fn) {
if (this._flushed) fn(this._response);
else this._methods.push(fn);
}
Q.flush = function (response) {
if (this._flushed) return;
this._response = response;
while (this._methods[0]) {
this._methods.shift()(response);
}
this._flushed = true;
}
})(Queue.prototype);
Я не могу показаться, чтобы получить его работа как рекламируется, хотя код выглядит правильно для меня. Когда я вызываю функцию флеша, я получаю this._methods is undefined
на линии while (this._methods[0]) {
.
Да, я использую его в качестве конструктора. Вот что странно. –
Хорошо, похоже, была проблема с тем, как я использовал Queue # flush в качестве обратного вызова. Он работает нормально. –
@Adam: Ах, если вы использовали его как * обратный вызов *, ваша проблема заключалась бы в том, что 'this' не будет тем, чего вы ожидаете в обратном вызове. Два сообщения в блоге об этом: [Вы должны помнить об этом] (http://blog.niftysnippets.org/2008/04/you-must-remember-this.html) и [Мифические методы] (http: //blog.niftysnippets .org/2008/03/mythical-methods.html) Второй, вероятно, больше нацелен на то, что вы пытаетесь сделать. –