Я читав, що функції асинхронізації, позначені async
ключовим словом, неявно повертають обіцянку:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
але це не є когерентним ... якщо припустити doSomethingAsync()
повернення обіцянки, а ключове слово очікування поверне значення з обіцянки, а не 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
показує?