【发布时间】:2019-02-08 11:31:59
【问题描述】:
使用 jQuery 承诺,我正在尝试:
- 为(动物的)所有可能值调用 API
- 为每只动物(动物声音)调用 API 方法
- 当每个动物的声音恢复时通知 - 假设需要一段时间才能解决
- 返回所有动物声音时通知
我将所有动物声音函数放入一个数组中,然后调用$.when()。我希望在所有动物的声音都返回后解决此问题,但我发现它会立即解决。有谁知道我做错了什么?
function () {
$('#txtNotification').text('Started ....');
$.ajax({
url: "/api/animals/all"
}).done(function(data) {
var animalFunctions = [];
for (var animalType of data) {
var animalFunction = $.ajax({
url: "/api/animal/sound/" + animalType
}).done(function(data) {
$('#txtNotification').text(data);
});
animalFunctions.push(animalFunction);
}
$.when(animalFunctions).then(function() {
$('#txtNotification').text('Done.');
});
});
}
【问题讨论】:
-
$.when()是 cannot accept an array 为数不多的 jQuery 函数之一 -
添加到@MTCoster 的评论,尝试将
$.when(animalFunctions)更改为$.when(...animalFunctions)。扩展运算符 (...) 可以将您的数组转换为参数列表。 -
这就是我推荐的。 ES6 之前的解决方案是
$.when.apply($, animalFunctions) -
@MTCoster。杰出的。那行得通。我永远不会得到那个。如果您将其写为答案,我将投票并接受。感谢您的帮助