Путаница по поводу того, как вернуть результат из асинхронной функции с помощью PromiseJavascript

Форум по Javascript
Anonymous
Путаница по поводу того, как вернуть результат из асинхронной функции с помощью Promise

Сообщение Anonymous »

Я какое-то время не прикасался к JS. Может кто-нибудь объяснить, почему я получаю такой неожиданный результат?
Моя цель — вернуть результат из асинхронной функции. (Или, другими словами, преобразовать асинхронную функцию в синхронную и вернуть из нее результат.)
Покажу это в коде:

Код: Выделить всё






function test1()
{
return new Promise((resolve, reject) => {

setTimeout(() => {
console.log("Timer fires");
resolve("Done");
}
, 2000);

});
}

async function test2()
{
console.log("Before promise");
let result = await test1();
console.log("After promise");

console.log("result=" + result);
return result;
}




let final_result = test2();
console.log("Got final result=" + final_result);




Я предполагал, что когда я вызываю свой test2, он будет ждать результата test1, поэтому я попаду в журнал:

Код: Выделить всё

Before promise
Timer fires
After promise
result=Done
Got final result=Done
Но я получаю следующее:

Код: Выделить всё

Before promise
Got final result=[object Promise]
Timer fires
After promise
result=Done
Это почти как let result = await test1(); выполняется дважды. Как только он сразу же возвращает Promise и каким-то образом пропускает все следующие за ним файлы console.log, а затем, после срабатывания таймера, он выполняет все эти операторы console.log.< /p>
Я явно что-то упускаю в потоке кода последней версии JS.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-promise

Вернуться в «Javascript»