0

現在我有funcA,funcB,arrayA和arrayB。在funcA中,arrayB將通過請求一些外部信息來填充它自己,並且這樣做的時間是多種多樣的。我希望它在arrayB.length == arrayA.length之後執行funcB,而arrayB是一個全局變量,其內容將在funcB中使用。我假設我需要使用JQuery推遲並承諾..所以我試過這個Javascript承諾依次執行兩個函數

 var arrayB = []; 
    var hi = funcA(); 
    hi.then(funcB()); 

    funcA(){ 
      var Dfd = $.Deferred(); 
      arrayB.forEach(function(x, i){ 
        some external retrieval; 
        if (arrayB.length == arrayA.length){ 
         Dfd.resolve(arrayB); 
        } 
      }) 

     return Dfd; 
    } 

但這沒有幫助。我應該如何改變它?

+0

支票需要內部「一些外部檢索」要做,否則它只是從來沒有解決(因爲它只會發生一次) – MinusFour

+0

@MinusFour我不好。它在那個功能裏面。我只是改變了我的文章 – dwuuuu

+0

所以,在funcA中,arrayB必須已經有數據了嗎?而arrayA通過一些你沒有顯示的方式以某種方式神奇地填充數據? –

回答

0

arrayB.forEach will not do something。它是空的。忘記所有這些功能並推遲。

fetch('/mydata.json') 
    .then(function(response) { 
    //save your data from response to arrayB 
    //call your funcA 
    }) 
    .catch((error) => { 
    console.log(error); 
}); 

我不知道爲什麼你需要的:

if (arrayB.length == arrayA.length){ 
    Dfd.resolve(arrayB); 
} 

但隨時調用FuncA的之前進行檢查。

0

我做這個解決了這個問題:

hi.done(function(){funcA()});