Return 에서 Await을 피하는 이유

TypeScriptJavaScript의 비동기 함수 내에서 return await은 거의 유용하지 않습니다. 비동기 함수의 return은 항상 Promise.resolve 에 래핑되므로 return await 은 Promise가 resolve 되거나 reject 되기전에 추가적인 시간이 발생하는것 외에는 아무 일도 하지 않습니다.

1
return await bar();

따라서 위와 같이 returnawait을 사용하지 않는 이유는 비동기 함수의 의미에 대한 이해 부족으로 인해 발생할 수 있는 일반적인 성능 위험을 방지 하기 위해서 입니다.

👎 Bad Code

1
2
3
async function foo() {
return await bar();
}

👍 Better Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
async function foo() {
return bar();
}

async function foo() {
await bar();
return;
}

async function foo() {
const x = await bar();
return x;
}

async function foo() {
try {
return await bar();
} catch (error) {}
}

하지만, 위의 Better Code 의 마지막에서는 bar() 에서 throw하는 errorcatch 할수있도록 하기 위해서는 await이 필요합니다.

Reference

ESLint rules docs