javascript, jQuery & Node.js/Node.js 사용전 자바스크립트

async/await 사용하기 for await of 문법 / ES2017 & ES2018 - 08

yy_dd2 2022. 12. 8. 13:38
반응형

ES2017 문법 노드 7.6부터 지원 -> async/await 사용

ES2018 문법 노드10버전 -> async/await 안에 for문을 사용하는 것

 

async/await 문법은 프로미스를 사용한 코드를 더 깔끔하게 사용할 수 있게 해준다

 

// .then .catch
function findAndSaveUser(Users) {
    Users.findOne({})
        .then((user)=>{
            user.name = 'zero';
            return user.save();
        })
        .then((user)=>{
            return Users.findOne({gender:'m'});
        })
        .then((user)=>{
            //...
        })
        .catch(err =>{
            console.log(err);
        })
}
// async/await으로 변경
async function findAndSaveUser(Users){
    let user = await Users.findOne({});
    user.name = 'zero';
    user = await user.save();
    user = await user.findOne({ gender : 'm'});
}
// 이렇게 변경이 가능하다 위 코드는 reject가 없어서 추가 작업으로 try catch로 감싸기
async function findAndSaveUser(Users){
    try{
        let user = await Users.findOne({});
        user.name = 'zero';
        user = await user.save();
        user = await user.findOne({ gender : 'm'});
    }
    catch(err){
        console.log(err);
    }
}

위에 두 코드는 promise를  async/await으로 변경한 내용

 

화살표 함수도 async 사용이 가능하다

// 화살표 함수도 async 와 같이 사용 가능하다
const findAndSaveUser2 = async (Users) => {
    try{
        let user = await Users.findOne({});
        user.name = 'zero';
        user = await user.save();
        user = await user.findOne({ gender : 'm'});
    }
    catch(err){
        console.log(err);
    }
}

 

async/await 을 for문과 같이 사용하기

for await of 문

// async/await 안에 for문을 사용하는 것
// for await of 문으로 프로미스 배열을 순회하는 내용
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
(async () => {
    for await (promise of [promise1, promise2]){
        console.log(promise);
    }
})

 

 

// async 함수의 반환값은 항상 Promise로 감싸지는데 실행 후 then을 붙이거나 또 다른 async 함수 안에서 await을 붙여 처리가 가능하다고 함 (아직 어려워서 잘 모르겠다 차차 하다보면 더 알 수 있을 듯 하다) 책 80p 참고 (노드js교과서)

반응형