Ho letto che le funzioni asincrone contrassegnate dalla async
parola chiave restituiscono implicitamente una promessa:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
ma questo non è coerente ... supponendo che doSomethingAsync()
restituisca una promessa e la parola chiave await restituirà il valore dalla promessa, non dalla promessa itsef, quindi la mia funzione getVal dovrebbe restituire quel valore, non una promessa implicita.
Allora qual è esattamente il caso? Le funzioni contrassegnate dalla parola chiave async restituiscono implicitamente le promesse o controlliamo ciò che restituiscono?
Forse se non restituiamo esplicitamente qualcosa, restituiscono implicitamente una promessa ...?
Per essere più chiari, c'è una differenza tra quanto sopra e
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
Nella mia sinossi il comportamento è effettivamente incoerente con le dichiarazioni di ritorno tradizionali. Sembra che quando restituisci esplicitamente un valore non promesso da una async
funzione, lo costringerà a racchiuderlo in una promessa. Non ho un grosso problema con esso, ma sfida il normale JS.
console.log
mostra?