现在我有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;
}
但这并没有帮助。我该怎么改变它?
答案 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()});