我有一個名爲'succeeder'的自制函數,它應該嘗試運行一個名爲'func'的函數,並且它在間隔後嘗試再次運行它。setTimeout之後,這會丟失上下文
這是第一次,當setTimeout後第二次調用func時,它工作的很好,它失敗了,這似乎沒有上下文。
你能想到這段代碼中不正確的東西嗎?
succeeder({
func : function() {
!this.dbOpen && this.init();
return true;
},
context : this,
interval : 2000,
success : function() { return true;}
});
function succeeder(opts) {
function run() {
try {
//_.delay(function(){opts.func();}.bind(opts.context), 2000);
setTimeout(function(){ return _.bind(opts.func, opts.context)(); }, 2000);
} catch (e) {
run(this.opts, this.interval);
}
}
run();
};
感謝
I * *疑這條線可以做不同的事情第二次運行:'this.dbOpen && this.init();'...也不知道是什麼'this.opts,this.interval! '是指在捕獲?兩者都顯得「未定義」。 – Carpetsmoker
這些是我忽略刪除的原始代碼的一部分,但實際上這是有缺陷的行,但不是因爲它是未定義的,它是,因爲這會丟失其上下文 –