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()});