Denis_maker
@Denis_maker
✔ Инженер-программист. Веду весь спектр разработки

Почему await не работает в моём случае?

Необходимо заставить node.js код работать последовательно. Есть функция, которая отрабатывает поздно, нужно дождаться её выполнения. Сейчас она возвращает огромную кипу json кода, без ответа. Ответ я вижу в console потом, когда весь последующий код основной функции отработал. Почему await не работает? Что я делаю не так?

async function вызываемая_функция(){
  return await request.get({url:'https://test_site/'}, function optionalCallback(err, body) {
    data = JSON.parse(body);
    console.log(data); // "Успех!" - выводит отлично, но слишком поздно
    return data ; // "Успех!";
  });
}

async function основная_функция(callback){
  ...
  let get_data = await вызываемая_функция();
  console.log(get_data); // Вместо слова "Успех!" выводит много ненужного кода
  ...
  return callback(...);
}


Если оберну код вызываемой функции в return await Promise.all(...), получу вот такую ошибку:
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))

Как дождаться выполнения функции и получить ответ? Без callback вложенностей, а в переменную get_data, как в моём примере...
  • Вопрос задан
  • 591 просмотр
Решения вопроса 1
dimovich85
@dimovich85
https://u-academy.net/
Вы в первой функции берете request.get({}, callback) работаете в "стиле колбеков", и ожидаете, что await дождется и распакует асинхронное действие справа, в этом ошибка. Оберните в Promise request.get и дальше работайте с async await.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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