Ich habe gelesen, dass asynchrone Funktionen, die mit dem async
Schlüsselwort gekennzeichnet sind, implizit ein Versprechen zurückgeben:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
aber das ist nicht kohärent ... vorausgesetzt , doSomethingAsync()
kehrt ein Versprechen, und das await Schlüsselwort wird der Wert aus dem Versprechen , zurückzukehren, nicht das Versprechen ITSEF, dann meine getVal Funktion sollte diesen Wert zurückgeben, nicht eine implizite Versprechen.
Was genau ist also der Fall? Geben Funktionen, die mit dem Schlüsselwort async gekennzeichnet sind, implizit Versprechen zurück oder steuern wir, was sie zurückgeben?
Wenn wir etwas nicht explizit zurückgeben, geben sie vielleicht implizit ein Versprechen zurück ...?
Um klarer zu sein, gibt es einen Unterschied zwischen oben und
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
In meiner Zusammenfassung ist das Verhalten in der Tat nicht mit den traditionellen return-Anweisungen vereinbar. Wenn Sie einen Nicht-Versprechen-Wert explizit von einer async
Funktion zurückgeben, wird er anscheinend zwangsweise in ein Versprechen eingeschlossen. Ich habe kein großes Problem damit, aber es trotzt normalem JS.
console.log
zeigt?