Я читал, что асинхронные функции, отмеченные async
ключевым словом, неявно возвращают обещание:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
но это не согласовано ... при условии, что doSomethingAsync()
возвращается обещание, а ключевое слово await вернет значение из обещания, а не обещание itsef, тогда моя функция getVal должна вернуть это значение, а не неявное обещание.
Так в чем именно дело? Возвращают ли функции, отмеченные ключевым словом async, обещания, или мы контролируем, что они возвращают?
Возможно, если мы не вернем что-то явно, тогда они неявно вернут обещание ...?
Чтобы быть более понятным, есть разница между приведенным выше и
function doSomethingAync(charlie) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(charlie || 'yikes');
}, 100);
})
}
async function getVal(){
var val = await doSomethingAync(); // val is not a promise
console.log(val); // logs 'yikes' or whatever
return val; // but this returns a promise
}
var ret = getVal();
console.log(ret); //logs a promise
В моем синопсисе поведение действительно несовместимо с традиционными операторами возврата. Похоже, что когда вы явно возвращаете значение, не являющееся обещанием, из async
функции, оно принудительно помещает его в обещание. У меня нет большой проблемы с этим, но он бросает вызов обычному JS.
console.log
показывает?