我知道已经问过很多类似的问题,但是有些问题已经过时,建议使用不建议使用的解决方案,有些描述的是解决方案,但不是在循环上下文中,没有一个可以直接回答我的问题。我想知道在运行一堆异步调用的另一段代码完成之后,运行一段代码的最新和最大方法是什么。
这里是我的代码的一般结构:
function fetchProperty(input) {
$.ajax({
url: 'http://some.api/' + input + '/foobar'
}).done(function(resp){
return $.parseJSON(resp).someProperty;
});
}
inputValues = ['this', 'that'];
outputValues = [];
$.each(inputValues, function(index, value){
outputValues.push(fetchProperty(value));
});
console.log(outputValues); // will return an empty array
基本上,我希望在$.each()
内部进行的所有AJAX调用完成后才执行最后一行代码。显然,我不想使用async: false
,因为它已被弃用。在将所有其他延迟的AJAX调用都完成之后,如何将console.log
延迟到最佳状态是什么?
我知道类似的问题已经问了很多遍,但是有些问题已经过时了,建议使用不建议使用的解决方案,有些描述了解决方案,但不是在循环的上下文中,它们都不是直接的……
请尝试使用异步等待,如下面的代码所示。问题似乎是提取是异步的,但控制台日志不是,因此它在提取数据之前先打印