async
키워드 로 표시된 비동기 함수가 암시 적으로 약속을 반환 한다는 것을 읽었습니다 .
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
그러나 그것은 일관 적이 지 않습니다 ... doSomethingAsync()
약속을 반환하고 await 키워드가 promise itsef가 아닌 promise에서 값을 반환 한다고 가정하면 getVal 함수 가 암시 적 약속이 아닌 해당 값을 반환해야합니다.
그렇다면 정확히 어떤 경우입니까? async 키워드로 표시된 함수는 암시 적으로 promise를 반환합니까? 아니면 반환하는 것을 제어합니까?
아마도 우리가 명시 적으로 무언가를 반환하지 않으면 암시 적으로 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
보여 주나요?