Javascript承诺在

时间:2017-07-04 23:23:30

标签: javascript jquery promise jquery-deferred deferred-execution

现在我有funcA,funcB,arrayA和arrayB。在funcA中,arrayB将通过请求一些外部信息来填充自己,并且这样做的时间是多种多样的。我希望它在arrayB.length == arrayA.length之后执行funcB,而arrayB是一个全局变量,其内容将在funcB中使用。我假设我需要使用JQuery延迟和promise..so我试过这个

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

但这并没有帮助。我该怎么改变它?

2 个答案:

答案 0 :(得分:0)

arrayB.forEach不会做任何事情。它是空的。忘记所有这些功能并推迟。

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之前,请随时进行检查。

答案 1 :(得分:0)

我通过这样做解决了这个问题:

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