@shading

Как правильно использовать Promise для полной синхронности действий?

Есть функция
function func() {
    getData().then(result => {
      // Код
    });
  }

  return [
    {
      // код
    },
  ];
}


Из нее мы вызываем метод, который делает запрос и возвращает промис.

async function getDataRequst() {
  const response = await getData(); // getData это запрос, который возвращает промис.

  return response;
}

function getData() {
  return new Promise<any>(resolve => {
        const data = await getDataRequest();
        resolve(data);
      }
}


Должно работать оно так:
1. Мы вызываем метод func, у нас выполняется промис, который находится в getData, далее с ним что-то происходит в then'e и только потом срабатывает return.
Сейчас return срабатывает ровно в тот момент, когда вызывается метод getData, не дождавшись, пока выполнится промис.
Очень мало работал с промисами, и не могу понять, в чем дело.
  • Вопрос задан
  • 124 просмотра
Решения вопроса 2
@Dasslier
FrontEnd Developer
В первой синхронной функции вы вызываете асинхронную функцию, поэтому сначала там срабатывает return
Ответ написан
@shading Автор вопроса
Вообщем как я надумал, это проблема в том, что когда я вызываю асинхронную операцию в синхронной, в любом случае асинхронная выполнится позднее синхронной, поскольку стек вызовов начинает начинает выполняться после всех синхронной действий. Т.е. этот запрос нужно делать до функции func, чтобы в return могли попасть данные из getDataRequest.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fomenkogregory
@fomenkogregory
Юниор софтварный инженер
Лучше не смешивать async функции и thenы, выбери что-то одно, так код будет более читабельным.
async function func() {
  const result = await getData()
      // Код

  return [
    {
      // код
    },
  ];
}
Ответ написан
Ваш ответ на вопрос

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

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