2017-08-14 63 views
1

在另一個線程一些幫助後,我現在有一個等待3000的工作代碼,然後設置一個變量爲1然後循環檢查每1000至該變量已發生變化,然後警告等待,直到功能齊全

現在

var myvalue; 
 

 
setTimeout(function() { 
 
    myvalue = 1; 
 
}, 3000); 
 

 
function check() { 
 
    if (myvalue == 1) { 
 
    alert("Value Is Set"); 
 
    } else { 
 
    setTimeout(check, 1000); 
 
    } 
 
} 
 

 
alert("debug1"); 
 
check(); 
 
alert("debug2");

我的問題是,它並沒有等到check()功能在移動之前完成。我已經添加了一些調試alert s,並且可以看到所有消息都立即被觸發。

如何在不使用超時的情況下等待?

+4

這似乎是一個很*** *** X/Y的問題。輪詢從來不是一個好主意,幾乎總是有一個更好的解決方案。當變量改變時,你有沒有辦法提升/監聽事件? –

+1

做研究/瞭解回調函數...我想你需要' –

+0

在哪個行動你想要這個功能。 – weBBer

回答

4

您可以傳遞迴調並在函數完成時調用它。

像這樣:

var myvalue; 
 

 
setTimeout(function() { 
 
    myvalue = 1; 
 
}, 3000); 
 

 
function check(callback) { 
 
    if (myvalue == 1) { 
 
    alert("Value Is Set"); 
 
    callback && callback(); 
 
    } else { 
 
    setTimeout(check, 1000, callback); 
 
    } 
 
} 
 

 
alert("debug1"); 
 
check(function() { 
 
    alert("debug2"); 
 
});

+0

我很困惑,因爲如果我在檢查函數後添加另一個警報,那麼它仍然會在開始時執行 - 我希望它在檢測函數完成之前等待,直到移動到 – fightstarr20

+0

這是因爲'setTimeout()'是有效的異步 - 因此你需要使用回調模式,因爲這個答案暗示 –

+0

@ fightstarr20你需要把你想要的代碼放在回調函數中的原始函數**之後(就像它) –