2017-08-10 67 views
1

我剛剛開始在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循環中使用回調的底層邏輯感興趣。

回答

2

根據條件交替兩個函數。您可以將條件和函數傳遞給對方。

function function1(condition, otherFunction) { 
    // code 
    if(!condition) otherFunction(condition, function1); 
} 

function function2(condition, otherFunction) { 
    // code 
    if(!condition) otherFunction(condition, function2); 
} 
+0

謝謝,這個作品完美。比我想到的奇怪的解決方案容易得多! – mdomino

+0

不客氣!很高興我能幫上忙。 – Anthony