Я читав, що функції асинхронізації, позначені 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показує?