Асинхронная функция - ждать не ожидая обещания
Я пытаюсь научиться асинхронному ожиданию. В этом коде -
const myFun = () => {
let state = false;
setTimeout(() => {state = true}, 2000);
return new Promise((resolve, reject) => {
setTimeout(() => {
if(state) {
resolve('State is true');
} else {
reject('State is false');
}
}, 3000);
});
}
const getResult = async () => {
return await myFun();
}
console.log(getResult());
Почему я получаю вывод как -
Promise { <pending> }
Вместо какого-то значения? Должна ли функция getResult()
ждать функции myFun()
, чтобы решить ее значение?
Ответы
Ответ 1
Если вы используете async/wait, все ваши вызовы должны использовать Promises или async/wait. Вы не можете просто волшебным образом получить асинхронный результат от вызова синхронизации.
Ваш последний вызов должен быть:
getResult().then(response => console.log(response));
Или что-то вроде:
(async () => console.log(await getResult()))()
Ответ 2
Нет смысла асинхронизироваться и ждать, когда это фактический случай:
Promise.resolve(3).then(console.log); console.log(4);
4
3
Другими словами, поскольку then() разветвляется и выполняется медленнее, чем последующие операторы (даже для разрешенного Promise), нам нужно поместить последующие операторы в then, например:
Promise.resolve(3).then(_ => { console.log(_); console.log(4); });
3
4
И так как это правда, то зачем ждать. Так что мне еще предстоит понять, почему асинхронные и ожидающие вообще существуют.