现在我有funcA,funcB,arrayA和arrayB。在funcA中,arrayB将通过请求一些外部信息来填充自己,执行此操作的时间各不相同。我希望它在arrayB.length == arrayA.length之后执行funcB,arrayB是一个全局变量,它的内容将在funcB中使用。假设我需要使用JQuery deferred和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;
}但这并没有什么帮助。我该怎么改呢?
发布于 2017-07-05 08:51:19
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之前,请随时进行检查。
发布于 2017-07-06 03:58:08
我通过这样做解决了这个问题:
hi.done(function(){funcA()});https://stackoverflow.com/questions/44915121
复制相似问题