Javascript jQuery在完成每个迭代之前等待两个单独的AJAX调用完成

Javascript jQuery在完成每个迭代之前等待两个单独的AJAX调用完成,javascript,jquery,ajax,Javascript,Jquery,Ajax,我一整天都在为此而挣扎,读了无数关于AJAX、deferred、promises等的SO帖子。 每次我所做的更改都是一样的:在所有AJAX调用完成之前调用generateLSRDetailRadiusMetrics函数-( 以下是我想做的: 循环遍历一个数组,对于数组中的每个项,我需要调用两(2)个AJAX函数。一旦数组中的所有项都进行了两(2)个AJAX调用,我就需要等待所有挂起的调用完成,然后再进入下一步 两个AJAX调用: Promissions.push(saveLayerCBG(rad

我一整天都在为此而挣扎,读了无数关于AJAX、deferred、promises等的SO帖子。
每次我所做的更改都是一样的:在所有AJAX调用完成之前调用generateLSRDetailRadiusMetrics函数-(

以下是我想做的:

循环遍历一个数组,对于数组中的每个项,我需要调用两(2)个AJAX函数。一旦数组中的所有项都进行了两(2)个AJAX调用,我就需要等待所有挂起的调用完成,然后再进入下一步

两个AJAX调用: Promissions.push(saveLayerCBG(radiuslayerbject,false))和Promissions.push(saveLayerPractices(radiuslayerbject,false))都返回承诺。如果我破坏代码,我可以看到数组确实包含承诺

根据我正在阅读的内容(但不清楚理解),我需要将承诺添加到数组中,然后使用$.when.apply($,promissions.done语法来评估承诺数组

我做错了什么

以下是我的主要代码:

function LSRRadiusMapProcessing(radiusMaps, newLSR, allRadiusLayers, lsrHeaderId, specialtyId) {
    return new Promise(function (resolve, reject) {
        const options = { steps: 64, units: 'miles' };
        let promises = [];
        for (let i = 0; i < radiusMaps.length; i++) { 
            promises.push(saveLayerCBG(radiusLayerObject, false));
            promises.push(saveLayerPractices(radiusLayerObject, false));
        }

        $.when.apply($, promises).done(function () {
            const lsrdetails = generateLSRDetailRadiusMetrics(lsrHeaderId, specialtyId);
            lsrdetails.then(function () {
                resolve(); 
            });
        });
    });
};
函数LSRRadiusMapProcessing(radiusmap、newLSR、allRadiusLayers、lsrHeaderId、specialtyId){
返回新承诺(功能(解决、拒绝){
常量选项={步数:64,单位:'英里'};
让承诺=[];
对于(设i=0;i
jQuery遵守承诺的“细微”区别如下所示:

$.when($.get(url1),$.get(url2))
 .then(function(){console.log(arguments[0][0]+arguments[1][0]);})
使用
.when()
可以将多个延迟分组到一个公共组中。下面的(jQuery-
.then()
将处理所有AJAX调用的结果。应将
.then()
中的回调函数设置为期望的参数数量与
$中延迟的参数数量相同。when()
-调用。在我的示例中,我只是在回调函数中使用
参数
迭代器来访问所有参数

//为测试设置AJAX环境:
//将数据镜像回JSON字符串(仅适用于GET):
函数echoURL(数据){
返回URL.createObjectURL(新Blob([JSON.stringify(data)],{type:“text/JSON”});
}
//返回不同值的两个“URL”(35和7)
常量url1=echoURL(35),url2=echoURL(7);
//================================
//jQuery延迟的实际演示:
//================================
$.when($.get(url1),$.get(url2))
.then(函数(){console.log(“then:,参数[0][0]+参数[1][0]);})
//它与.done()一样有效:
$.when($.get(url1),$.get(url2))
.done(function(){console.log(“done:,参数[0][0]+参数[1][0]);})

我想你想要的是
承诺。所有(承诺)
@Barmar而不是$.when.apply($,承诺)。done语句?是的。虽然我认为
$.when.apply($,承诺)
应该是等效的。对……两者之间似乎有一些细微的区别,但不是真的。从$.when.apply($,承诺)改为Promise.all(承诺)但是没有起作用。感谢这一课;但是,我不确定它与我的问题/问题有什么关系。我对参数不感兴趣,也没有在when中执行AJAX调用。AJAX调用是在循环中完成的,承诺是在承诺数组中聚合的。我不得不承认,代码太多了粗糙,我没有时间这么做。;-)如果你能以某种方式简化你的例子,并将其转化为真实的例子,那将是很有帮助的。这样,我和这里的其他人就更容易理解你的观点。我的回答是,如果你使用延迟而不是承诺,那么你可以留在jQuery世界中。