Node js를 통해 테스트를 진행하던 중 callback을 강제로 써야 되는 경우가 발생했다.
async/awiat 또는 promise에 익숙해져 있던 탓에 callback을 계속 쓰다 보면 헷갈리는 경우가 많은데
callback을 promise 처럼 바꿔서 async/await 패턴을 사용하는 방법이 있다.
아래의 예를 먼저 확인해보자.
const timeoutTest = async()=>{
console.log('0초');
await new Promise((resolve,reject)=>setTimeout(()=>resolve(),5000)); //5초 대기
console.log('5초');
}
timeoutTest();
//결과:
//0초
//5초 (5초뒤에 출력)
우선 new Promise라는 함수를 보도록 하자
Promise의 생성자 함수는 resolve와 reject 함수를 인자를 받는 콜백함수를 인자로 전달받는다
따라서 Promise의 인자함수 안에서 비동기처리를 진행한 뒤에 반드시 resolve 또는 reject를 호출하여 함수가 끝났다는 것을 알려줘야 한다
여기서 resolve를 호출하는 경우는 처리가 무사히 끝났을 경우 사용을 하고
reject를 호출하는 경우는 처리 도중 오류가 발생했을 때 사용하도록 한다.
만약 반환되어야 할 결괏값이 존재한다면 resolve함수의 인자를 넣어 resolve(result); 형식으로 종료해 주면 된다.
아래 예시를 통해 resolve를 어떻게 사용하는지 봐보자.
const timeoutTest = async () => {
console.log('시작!')
const result = await new Promise(
(resolve, reject) =>
setTimeout(() => {
resolve('결과값을 표시합니다.');
}, 5000)
);
console.log(result);
}
timeoutTest();
//시작!
//결과값을 표시합니다. (5초 뒤에 표시됨)
resove()의 인수로 '결과값을 표시합니다.'라는 문자열을 넣었고
그 결과가 result 변수에 저장이 되게 되며, console.log()로 출력하게 되면 result의 결과를 볼 수가 있다.
'⚙️ Node.js' 카테고리의 다른 글
[NodeJS] Gmail SMTP로 인증메일 전송하기 (0) | 2023.11.08 |
---|---|
[Node.js] path 모듈에 대해 알아보자 (0) | 2023.02.20 |
[Node.js] MySql 시간 출력 시 Z가 붙는 문제 (0) | 2022.09.02 |
[Node.js] crypto 암호화 구현 시 Invalid key length 오류 (0) | 2022.08.17 |
[Node.js] MySql Connection Pool 작동 방식 및 구현 (0) | 2022.07.06 |