@ince

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

Как можно реализовать асинхронный рекурсивный вызов?
Необходимо после получения ответа от каждого ajax запроса, используя результаты предыдущего, направлять новый, и так до достижения определенного условия.
  • Вопрос задан
  • 193 просмотра
Решения вопроса 2
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
Бородатый программер
function recursiveRequest(requestData) {
  return fetch(
    //здесь формируем запрос из requestData
  ).then(response => response.json()).then(result => {
    if(result.isFinal) return result; // тут условие
    return recursiveRequest(result.nextRequest); //вызываем следующий запрос
  });
}

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

const bullshitRequest = async (data) => {
  let result = data;

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

  return result;
};
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы