Ho letto che le funzioni asincrone contrassegnate dalla parola chiave async
restituiscono implicitamente una promessa:async/await restituisce implicitamente la promessa?
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
ma che non è coerente ... assumendo doSomethingAsync()
restituisce una promessa, e la parola chiave await restituirà il valore dalla promessa, non è la promessa, ma la mia funzione getVal dovrebbe restituire tale valore, non una promessa implicita,.
Quindi, qual è esattamente il caso? Le funzioni contrassegnate dalla parola chiave async restituiscono implicitamente promesse o controlliamo ciò che restituiscono?
Forse se non restituiamo esplicitamente qualcosa, implicitamente restituiscono una promessa ...?
Per essere più chiari, v'è una differenza tra il 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 riassunto il comportamento è infatti incompatibile con istruzioni return tradizionali. Sembra che quando si restituisce esplicitamente un valore di non promessa da una funzione async
, lo imporrà in una promessa. Non ho grossi problemi con esso, ma sfugge al normale JS.
Cosa mostra 'console.log'? – Barmar
è il valore trasmesso dalla funzione di risoluzione promessa, non la promessa stessa –
Forse attende di scartare il risultato della promessa. –