ich gelesen, dass Asynchron-Funktionen durch das Schlüsselwort ein Versprechen implizit zurückgeben async
markiert:Async/wartet implizit zurück Versprechen?
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
aber das ist nicht kohärent ist ... vorausgesetzt, doSomethingAsync()
ein Versprechen gibt, und das await Schlüsselwort wird der Wert aus dem Versprechen, zurückzukehren, nicht das Versprechen itsef, dann sollte meine getVal Funktion diesen Wert zurückgeben, kein implizites Versprechen.
Also was genau ist der Fall? Versehen Funktionen, die durch das async-Schlüsselwort gekennzeichnet sind, implizit Versprechen oder kontrollieren wir, was sie zurückgeben?
Vielleicht, wenn wir etwas nicht explizit zurückgeben, dann geben sie implizit ein Versprechen ...?
mehr klar zu sein, gibt es einen Unterschied zwischen der 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 meinem Synopse das Verhalten mit traditionellen return-Anweisungen in der Tat unvereinbar ist. Es scheint, dass, wenn Sie explizit einen nicht-Versprechen-Wert aus einer async
-Funktion zurückgeben, wird es gezwungen, es in eine Zusage umzubrechen. Ich habe kein großes Problem, aber es ist normal JS.
Was wird 'console.log' angezeigt? – Barmar
ist es der Wert, der durch die Versprechensauflösungsfunktion übergeben wird, nicht das Versprechen selbst –
Vielleicht warten, wickelt das Ergebnis vom Versprechen ab. –