Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要一种方法来执行封装在函数中的ajax调用数组_Javascript_Ajax_Asynchronous_Promise - Fatal编程技术网

Javascript 我需要一种方法来执行封装在函数中的ajax调用数组

Javascript 我需要一种方法来执行封装在函数中的ajax调用数组,javascript,ajax,asynchronous,promise,Javascript,Ajax,Asynchronous,Promise,我使用的系统设计为只进行同步ajax调用,因此我正在寻找一种解决方法。首先,我有一个封装在函数中的ajax调用。然后,我将其包装到另一个函数中,以便在将其添加到数组时不会执行它。因此,我有两个异步ajax调用函数数组。我希望执行第一个数组中的所有内容,然后等待所有内容完成。然后我想在第二个数组中执行所有内容。这就是我目前所拥有的 我有一个遍历项目的循环,每个项目都有一个wrap函数,它接受我已经包装好的ajax调用,这样就不会执行它,并将它存储在如下所示的数组中 var postpromises

我使用的系统设计为只进行同步ajax调用,因此我正在寻找一种解决方法。首先,我有一个封装在函数中的ajax调用。然后,我将其包装到另一个函数中,以便在将其添加到数组时不会执行它。因此,我有两个异步ajax调用函数数组。我希望执行第一个数组中的所有内容,然后等待所有内容完成。然后我想在第二个数组中执行所有内容。这就是我目前所拥有的

我有一个遍历项目的循环,每个项目都有一个wrap函数,它接受我已经包装好的ajax调用,这样就不会执行它,并将它存储在如下所示的数组中

var postpromises = [];

var WrapFunction = function (fn, context, params) {
    return function () {
        fn.apply(context, params);
    };
}

var postPromise = WrapFunction(ajaxFunction, this, [{
    url: url,
    data: j,
    async: true,
    type: 'POST',
    success: function (data) {
        //success
    },
    error: function (xhr, textStatus, errorThrown) {
        //error
    }
}]);

postpromises.push(postPromise);
然后我有相同的代码进行验证。在我进入下一页之前,我有以下几点

$.when.apply(undefined, postpromises).then(function () {
            console.log();
            $.when.apply(undefined, validatepromises).then(function () {
                console.log();
            });
        });
问题是,当我读到上面的代码时,我的
postpromises
甚至都没有被执行,所以我觉得我可能遗漏了一些东西


想法?

函数
$。当
需要承诺时,在代码中返回的函数不返回任何内容,因此只需返回包装函数的结果:

  • ES6扩展运算符
  • 函数参数对象
var postpromises=[];
var validatepromises=[];
函数f1(){
var fakePromise=$.Deferred();
设置超时(()=>{
假装承诺。解决(“我解决了!!”;
}, 500);
返回fakePromise.promise();
}
//老的
/*var WrapFunction=函数(fn、上下文、参数){
返回函数(){
fn.应用(上下文、参数);
};
}*/
var WrapFunction=函数(fn、上下文、参数){
返回函数(){
返回fn.apply(上下文,参数);
}();
}
var postPromise=WrapFunction(f1,this,[]);
postPromise=[postPromise];
var validatePromise=WrapFunction(f1,this,[]);
validatepromises=[validatePromise];
//老的
/*$.when.apply(未定义,后promises).then(函数(res){
控制台日志(res);
$.when.apply(未定义,validatepromises)。然后(函数(res){
控制台日志(res);
});
});*/
$.when.apply(null,[…postpromises,…validatepromises])。然后(function(){
console.log([].slice.call(参数))
})

WrapFunction不返回承诺这就是为什么可能没有执行的原因吗?回答得好,但也改进了不必要的
$嵌套。而是返回内部
$的值。当
时,在外部承诺链上应用
然后
。是的,实际上嵌套的
可以合并到一个函数中时,我将更新我的答案