[英]Promise.all cannot find Resolve for parent Promise
我有一个包含N个html选择的页面。 我有一个名为“ run_all_ajax”的函数,该函数遍历它们并调用填充它们的ajax函数。 我希望仅当Promise.all在其中完成时才能从run_all_ajax返回。
现在,控制台读取;
全部完成,0
毕竟完成了
0、1、2、3等
意思是在我添加到promises数组之前,promise.all正在解决。 我该如何纠正?
另外,我想了解承诺的安排如何在时间方面发挥作用。 我们是否假设我们可以遍历选择数组并将其添加到Promise数组中,比我们用Promise.all()解决所有未完成的Promise更快?
function run_all_ajax() {
return new Promise(function (resolve, reject) {
var promises = [];
$("[selectgrid]").each(function (i, obj) {
$.ajax({
//stuff
success: function (response) {
//stuff
console.log(i);
}, //end: success
complete: function (jqXHR, textStatus) {//
promises.push(new Promise(function (resolve, reject) { resolve("Complete"); }));
}
}); //end: $.ajax
});
Promise.all(promises).then(function (values) {
console.log('all done, ' + promises.length);
resolve("Complete");
});
}); //end promise
}
run_all_ajax().then(function(){
console.log('after all done');
})
您在错误的地方(时间) push
承诺。 无需创建new Promise
。 $.ajax()
返回您需要的承诺。
这样:
promises.push($.ajax({
//stuff
}));
promises.push
当请求完成后,这是方式称为Promise.all
执行。
基本上,您正在调用Promise.all([])
,它会立即解决。
这个
new Promise(function (resolve, reject) { resolve("Complete"); })
也立即解决。 等于Promise.resolve("Complete")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.