繁体   English   中英

Promise.all找不到父Promise的解决

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM