【发布时间】:2020-10-12 23:07:32
【问题描述】:
我整天都在为此苦苦挣扎,并阅读了无数关于 AJAX、延迟、承诺等的 SO 帖子。
每次,随着我所做的每一次更改,它仍然是相同的:在所有 AJAX 调用完成之前调用 generateLSRDetailRadiusMetrics 函数。 :-(
这是我想要做的:
循环遍历一个数组,对于数组中的每个项目,我需要调用两 (2) 个 AJAX 函数。一旦数组中的所有项目都进行了两 (2) 个 AJAX 调用,然后我需要等待所有待处理的调用完成,然后再继续下一步。
两个 AJAX 调用: promises.push(saveLayerCBG(radiusLayerObject, false)) 和 promises.push(saveLayerPractices(radiusLayerObject, false)) 都返回承诺。如果我破坏了代码,我可以看到该数组确实包含 Promise。
根据我正在阅读的内容(但不是很清楚),我需要将承诺添加到数组中,然后使用 $.when.apply($, promises).done 语法评估 promise 数组。
我在这里做错了什么?
这是我的主要代码:
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();
});
});
});
};
【问题讨论】:
-
我想你想要
Promise.all(promises) -
@Barmar 而不是 $.when.apply($,promises).done 语句?
-
是的。虽然我认为
$.when.apply($, promises)应该是等价的。 -
对...两者之间似乎存在一些细微差别,但并非如此。但是,从 $.when.apply($, promises) 更改为 Promise.all(promises) 并没有奏效。
标签: javascript jquery ajax