J'ai lu que les fonctions asynchrones marquées par le async
mot - clé renvoient implicitement une promesse:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
mais ce n'est pas cohérent ... en supposant que doSomethingAsync()
retourne une promesse, et le mot clé await retournera la valeur de la promesse, pas la promesse itsef, alors ma fonction getVal devrait renvoyer cette valeur, pas une promesse implicite.
Alors, quel est exactement le cas? Les fonctions marquées par le mot clé async renvoient-elles implicitement des promesses ou contrôlons-nous ce qu'elles renvoient?
Peut-être que si nous ne renvoyons pas explicitement quelque chose, alors ils renvoient implicitement une promesse ...?
Pour être plus clair, il y a une différence entre ce qui précède et
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
Dans mon synopsis, le comportement est en effet incompatible avec les déclarations de retour traditionnelles. Il semble que lorsque vous retournez explicitement une valeur non prometteuse à partir d'une async
fonction, cela forcera son encapsulation dans une promesse. Je n'ai pas de gros problème avec ça, mais ça défie le JS normal.
console.log
montre-t-il?