Я прочитал, что асинхронные функции, отмеченные ключевым словом async
, неявно возвращают обещание:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
но это не является когерентным... если doSomethingAsync()
возвращает обещание, а ключевое слово ожидания будет возвращать значение из обещания, а не обещание itsef, тогда моя функция getVal должна вернуть это значение, а не подразумеваемое обещание.
Итак, что именно происходит? Функции, отмеченные ключевым словом async, неявно возвращают promises или мы контролируем, что они возвращают?
Возможно, если мы явно не вернем что-то, то они неявно вернут обещание...?
Чтобы быть более ясным, существует разница между приведенным выше и
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
В моем резюме поведение действительно противоречит традиционным операторам return. Похоже, что когда вы явно возвращаете неопределенное значение из функции async
, это заставит его обернуть в обещание.
У меня нет большой проблемы с этим, но он бросает вызов нормальному JS.