【发布时间】:2017-02-10 04:17:28
【问题描述】:
我有一个动态确定的 ajax 调用列表,需要一个接一个地进行。由于承诺在所有浏览器中的实现并不相同,有没有办法在前一个完成后进行每个 ajax 调用?
我试过了:
var favoritesArray = [1,2,3] //dynamically created by user
var arrayOfCalls = $.each(favoritesArray, function each(idx) {
var favId = favoritesArray[idx];
return $.ajax({ url: '/favorites/' + favId, type: 'DELETE' });
});
$.when(arrayOfCalls)
.then(function success() {
doStuff();
});
所有调用都会运行,但不要等待前一个调用完成。有没有办法做到这一点?
【问题讨论】:
-
不知道你为什么担心它。这些似乎都不依赖于以前的。
$.when将是一致的跨浏览器,但请注意,$.each不会返回任何内容,因此arrayOfCalls将是未定义的 -
每个调用都会更新同一个列表,如果调用同时触发,列表中剩余的项目将不正确且不同,具体取决于哪个先完成。
-
感谢您提供有关 $.each 的说明。
-
arrayOfCalls.reduce((p, c) => p.then(c), $.when()).then(function success() { ... -
@BenjaminGruenbaum 看起来应该这样做,但没有。