Как выполнить код после завершения всех вызовов $ .getJSON, в том числе внутренних и в циклах? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть этот код.

$.getJSON("/some-path.json",function(resultArray){
  for (var j = resultArray.length - 1; j >= 0; j--){
    $.getJSON(resultArray[j],function(resultObject){
      // Bunch of stuff happens here
    });
  }
}).done(function(){
  // This should execute only after ALL $.getJSON codes above finish
});

Но код в .done() запускается до того, как завершится весь материал .getJSON().Как сделать так, чтобы код в .done() выполнялся ПОСЛЕ окончания .getJSON()?

1 Ответ

1 голос
/ 08 июля 2019

Я бы использовал синтаксис async / await и использовал бы Promise.all, чтобы дождаться завершения всех внутренних выборок:

(async () => {
  const resultArray = await $.getJSON("/some-path.json");
  await Promise.all(resultArray.map(
    url => $.getJSON(url, (innerResult) => {
      // Bunch of stuff happens here
    })
  ));
  // all inner results have completed
})();
...