Li que as funções assíncronas marcadas pela async
palavra - chave retornam implicitamente uma promessa:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
mas isso não é coerente ... supondo que doSomethingAsync()
retorne uma promessa, e a palavra-chave await retornará o valor da promessa, não a promessa em si, então minha função getVal deve retornar esse valor, não uma promessa implícita.
Então, qual é exatamente o caso? As funções marcadas pela palavra-chave async retornam promessas implicitamente ou nós controlamos o que elas retornam?
Talvez, se não retornarmos algo explicitamente, eles retornem implicitamente uma promessa ...?
Para ser mais claro, há uma diferença entre o acima 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
Na minha sinopse, o comportamento é de fato inconsistente com as declarações de retorno tradicionais. Parece que quando você retorna explicitamente um valor não prometido de uma async
função, ele forçará o agrupamento em uma promessa. Eu não tenho um grande problema com isso, mas desafia o JS normal.
console.log
mostra?