https://eslint.org/docs/rules/no-return-await
이렇게 하지 말 것
async function f() {
return await promiseFunc();
}
promiseFunc() 이 resolve 될때까지 함수 f는 콜스택에 유지된다.
await 처리를 최상위에서만 해주면 됨.
f()는 return promiseFunc()
으로 그대로 Promise를 리턴해주면 됨.
Nest는 controller에서 Promise를 리턴하면, 자체적으로 resolve 함.
⇒ 되긴 한다! 근데 그러면 entity 를 그대로 리턴하는 셈이라서 이렇게 쓸 일은 없을 듯.
다시 읽어보니 콜스택에 유지 되느냐가 포인트인듯.
const makePromise = () =>
new Promise((resolve) => {
setTimeout(() => {
resolve('done');
}, 1000);
});
const testReturnAwait = async () => {
return await makePromise();
};
const noReturnAwait = async () => {
return makePromise();
};
(async () => {
console.log('start ' + new Date().getDate() + ':' + new Date().getSeconds());
const arr1 = [];
const arr2 = [];
for (let i = 0; i < 10; i++) {
arr1.push(testReturnAwait());
arr2.push(noReturnAwait());
}
await Promise.all(arr1).then((responses) => console.log(responses));
console.log('arr1 ' + new Date().getDate() + ':' + new Date().getSeconds());
await Promise.all(arr2).then((responses) => console.log(responses));
console.log('arr2 ' + new Date().getDate() + ':' + new Date().getSeconds());
for (let i = 0; i < 10; i++) {
console.log(await testReturnAwait());
}
})();