async
キーワードでマークされた非同期関数が暗黙的にpromiseを返すことを読みました。
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
しかし、それは首尾一貫していない...仮定doSomethingAsync()
がpromise を返し、awaitキーワードがpromise itefではなくpromiseから値を返す場合、私のgetVal関数は暗黙のpromiseではなくその値を返す必要があります。
それでは、具体的にはどうなのでしょうか。asyncキーワードでマークされた関数は暗黙的にpromiseを返しますか、それともそれらが返すものを制御しますか?
おそらく、明示的に何かを返さない場合、暗黙的に約束が返されます...?
より明確にするために、上記との違いがあります
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
私の概要では、実際の動作は従来のreturnステートメントと矛盾しています。async
関数から非プロミス値を明示的に返すと、プロミスに強制的にラップされるようです。大きな問題はありませんが、通常のJSには対応できません。
console.log
表示されますか?