等待循环内的异步调用完成

问题描述 投票:0回答:1

我知道已经问过很多类似的问题,但是有些问题已经过时,建议使用不建议使用的解决方案,有些描述的是解决方案,但不是在循环上下文中,没有一个可以直接回答我的问题。我想知道在运行一堆异步调用的另一段代码完成之后,运行一段代码的最新和最大方法是什么。

这里是我的代码的一般结构:

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延迟到最佳状态是什么?

我知道类似的问题已经问了很多遍,但是有些问题已经过时了,建议使用不建议使用的解决方案,有些描述了解决方案,但不是在循环的上下文中,它们都不是直接的……

javascript jquery jquery-deferred
1个回答
1
投票

请尝试使用异步等待,如下面的代码所示。问题似乎是提取是异步的,但控制台日志不是,因此它在提取数据之前先打印

© www.soinside.com 2019 - 2024. All rights reserved.