@ince

Как написать асинхронную рекурсивную функцию?

Как можно реализовать асинхронный рекурсивный вызов?
Необходимо после получения ответа от каждого ajax запроса, используя результаты предыдущего, направлять новый, и так до достижения определенного условия.
  • Вопрос задан
  • 254 просмотра
Решения вопроса 3
zendor
@zendor
Например использовать async/await:
async function foo(val = 0) {
  const response = await request(val); //предполагается, что request возвращает promise
  if (response.error) throw new Error('something bad happened');
  //делаем что-то с response
  foo(response.newVal); //вызываем foo с новым val
}
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
function recursiveRequest(requestData) {
  return fetch(
    //здесь формируем запрос из requestData
  ).then(response => response.json()).then(result => {
    if(result.isFinal) return result; // тут условие
    return recursiveRequest(result.nextRequest); //вызываем следующий запрос
  });
}

recursiveRequest({}).then(finalResult => {
  //работаем с последним результатом
});
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия не нужна:

async function request(data) {
  let result = data;

  do {
    result = await запрос(result);
  } while (result не тот, который нужен);

  return result;
}

Но если очень хочется, тогда так:

function requestRecursive(data) {
  return запрос(data).then(result => {
    return result тот, который нужен
      ? result
      : requestRecursive(result);
  });
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы