[Node.js] async/await

Cjw.dev·2023년 3월 6일

Node.js

목록 보기
6/10

async function의 도입

  • promise를 간단하게 사용할 수 있도록 해줌
  • 변수 = await 프로미스 : 인 경우 프로미스가 resolve 된 값이 변수에 저장
  • 변수 await 값 : 인 경우 그 값이 변수에 저장
  • await로 값을 반환하기 때문에 실패값에 대한 반환을 할 수 없기에 try-catch로 예외처리 해줘야한다.
  • async 함수는 항상 promise를 반환(return)

정리
Promise : 아직 값을 반환하지 않는 객체 -> .then을 사용하여 값을 반환
async await : 프로미스사용을 더 간략하게 하기 위해 나왔기에 프로미스에 사용하는 것
async : 프로미스 객체를 감싸고 있는 함수 앞에 붙혀야 함.
await : then과 같은 역할로 프로미스 객체 앞에 붙히면 값을 반환함


Promise ~ then을 async await 로 축약해보자

// - async await 로 한번 더 축약 가능 
function findAndSaveUser(Users){
    Users.findOne({})
    .then((user)=>{
        user.name='zero';
        return user.save();
    })
    .then((user)=>{
        return Users.findOne({gender : "men"})
    })
    .then((user)=>{
        생략
    })
    .catch((err)=>{
        return err;
    })
};

// 축약한 코드 
async function findAndSaveUser(Users){
    try {
        let user = await Users.findOne({}) // 실행순서가 오른쪽에서 왼쪽
        user.name = 'zero';
        user = await user.save();
        user = await Users.findOne({gender : "man"})
    } catch (error) {
        console.error(error)
    }
   
};

async 함수에서 return한 것들 then or await로 받아야 함

// 임의의 프로미스 생성
const promise = new Promise(()=>{})
promise.then(()=>{})

// async await
async function main(){
    const result = await promise;
}

// 탑레벨 await(async가 없어도 await만 사용가능)
const result = await promise;

// async 함수에서 return한 것들 then or await로 받아야 함 
async function main(){
    const result = await promise;
    return "zerocho"
}

main().then((name)=>{}) 
// 또는
const main = await main()

for await or

node 10부터 지원
for await (변수 of 프로미스 배열)

  • resolve된 프로미스가 변수에 담겨 나옴
  • await을 사용하기 때문에 async 함수 안에서 해야함
const promise1 = Promise.resolve("성공");
const promise2 = Promise.reject("실패");
(async () => {
    try {
        for await (promise of [promise1, promise2]){
            console.log(promise);
        }
    } catch (error) {
             console.error(error);   
    }
    
})();
profile
백엔드 개발 공부 기록 22.11.07 ~ ing

0개의 댓글