コールバックを受け取る関数の単純なキューを実装しようとしています。私の問題は、flushメソッドでは、実行されるアクションが(私の場合はindexedDBの呼び出しで)長時間実行されるものである場合、 "this"がnullであることです。私はこの種の行動を経験したことがないので、何が起こっているのか教えてください。これがnullの場合
ここではコードです:あなたが私たちに与えてくれたものに基づいて
var Queue = (function() {
function Queue() {
};
Queue.prototype.items = [];
Queue.prototype.results = [];
Queue.prototype.add = function (action) {
this.items.push(action);
};
Queue.prototype.complete = function() { };
Queue.prototype.flush = function() {
var args = Array.prototype.slice.call(arguments);
if (args.length > 0) { this.results.push(args); }
if (this.items.length > 0) {
var action = this.items.shift();
action.call(this);
} else { // Complete, call back multi.
var results = this.results;
this.clear();
this.complete(results);
}
};
Queue.prototype.clear = function() {
this.items = [];
this.results = [];
};
Queue.create = function() {
return new Queue;
};
return Queue;
})();
どちらの行ですか? 「これは何だと思いましたか?それは何の代わりになったのですか?無関係のビットを削除して、問題の範囲を5〜6行に絞り込みます(ただし、削除するだけではなく、削除の周りをリファクタリングする必要があります)。 –
@LightnessRacesinOrbitフラッシュメソッドの内部。私はこれをQueueのインスタンスにすることを期待していましたが、代わりにnullでした。 – Matthew
新しいスコープがあります。 –