Асинхронная функция - ждать не ожидая обещания

Я пытаюсь научиться асинхронному ожиданию. В этом коде -

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

И так как это правда, то зачем ждать. Так что мне еще предстоит понять, почему асинхронные и ожидающие вообще существуют.