我剛剛開始在web上下文中使用JavaScript,但我還沒有完全圍繞回調函數,但我認爲在我目前的場景中,我將需要一個(或更多?)。如何在while循環中處理交替異步函數?
我有兩個函數需要反覆交替運行,直到滿足某個條件(條件本身取決於函數2以某種方式更改全局變量,不確定是否相關)。
所以最初我嘗試這樣做:
while(condition !== true) {
function1();
function2();
}
然而,這並不因爲兩者的工作函數都利用了setInterval
函數來處理每一個動畫等while循環執行一切都太快了(!)並不等待功能完成。現在我知道了,據說我需要在函數中使用回調函數。然而,因爲function2()
需要等待function1()
和function1()
之後需要等待function2()
,我不太清楚如何在這裏使用回調,因爲我認爲這需要某種無限的回調鏈。
如果這會有所幫助,用僞代碼,此刻整個設置是這樣的(假設它等待一個全局變量來達到一定的指標):
var myGlobalCounter = 0;
while(myGlobalCounter < 8) {
doSomeStuff(400);
doSomeMoreStuff(400);
}
function doSomeStuff(targetCount) {
// first function that needs setInterval
var localCount = 0;
myInterval = setInterval(function(){
if (localCount !== targetCount) {
count += 1;
// animation happening here
} else {
clearInterval(myInterval);
}
},20);
}
function doSomeOtherStuff(targetCount) {
// second function that needs setInterval and alters the global counter
var localCount = 0;
myInterval = setInterval(function(){
if (localCount !== targetCount) {
localCount += 1;
// another animation happening here
myGlobalCounter += 1;
} else {
clearInterval(myInterval);
}
},20);
}
我怎樣才能解決這個問題建立?請記住,我是一個初學者,我希望在普通JavaScript中使用一個解決方案,因爲我已經設法避免了jQuery到目前爲止的其他項目,並且對在while循環中使用回調的底層邏輯感興趣。
謝謝,這個作品完美。比我想到的奇怪的解決方案容易得多! – mdomino
不客氣!很高興我能幫上忙。 – Anthony