пока вызовы цикла API и сохранение ответа в массиве в nodejs - PullRequest
0 голосов
/ 24 октября 2019
var allData = []

function makeRequest(){
  fetch(url)
  .then(function(res) {
    return res.json();
  })
  .then(function(json){
    allData.push(...json.result)
    if (someCondition from json) {
      makeRequest()
    } 
  })
}
makeRequest();
console.log(allData)

Вышеуказанная функция непрерывно выполняет вызовы API, пока не будет выполнено условие в ответе API. Я надеюсь добавить все результаты вызова API в переменную с именем allData. Выполнение console.log для allData в указанном выше состоянии приводит к пустому массиву. Как подождать, пока все функции makeRequest будут запущены, а затем console.logging allData?

1 Ответ

0 голосов
/ 24 октября 2019

fetch возвращает обещание, которое вернет res после его разрешения. Обещание асинхронно. Попробуйте это

function makeRequest(){
  return fetch(url)
  .then(function(res) {
    return res.json();
  })
  .then(function(json){
    allData.push(...json.result)
    if (someCondition from json) {
      return makeRequest() // return a promise to continue waiting
    } 
  })
}
makeRequest().then(function() { // waiting
  console.log(allData)
});
...