본문 바로가기

Programming/Node.js

2. Javascript ES2015 (7) - async/awiat [2/2]

node js logo image

 

 

 

 

 

앞선 아티클에서 살펴보았던 async/await 코드 예제를 조금 더 응용해 보겠습니다. 

 

async function findAndSaveUser(Useres) {
    try { 
        let user = await Useres.findOne({});
        user.name = 'zero';
        user = await user.save();
        user = await Useres.findOne({ gender: 'm' });
        // 생략
    } catch (error) {
        console.log(error);
    }
}

 

 

위 코드에서 화살표 함수를 동일하게 적용하여 async와 같이 사용할수도 있습니다. 같은 코드에 화살표 함수를 적용해 보겠습니다. 

 

const findAndSaveUser = async (Users) => {
    try { 
        let user = await Useres.findOne({});
        user.name = 'zero';
        user = await user.save();
        user = await Useres.findOne({ gender: 'm' });
        // 생략
    } catch (error) {
        console.log(error);
    }
};

 

 

 


 

 

async/await를 for문과 같이 사용하는 것도 가능합니다(노드 10 버전부터 지원하는 ES2018 문법). 우선 이전의 아티클에서 사용했던 예제를 다시 꺼내보겠습니다. 

 

 

 

2. Javascript ES2015 (6) - 프로미스 [5/5]

앞선 아티클까지 우리는 프로미스 여러 개를 순차적으로 실행하는 방법까지 살펴보았습니다. 그런데, 순차적인 실행뿐만 아니라 여러 개를 한 번에 실행할 수 있는 방법도 존재합니다. 지금부

nozeroslope.tistory.com

 

const promise1 = Promise.resolve('SUCCESS 1');
const promise2 = Promise.resolve('SUCCESS 2');
Promise.all( [promise1, promise2] )
    .then( (result) => {
        console.log(result);    // SUCCESS 1, SUCCESS 2
    })
    .catch( (error) => {
        console.error(error);
    })

 

프로미스 두 개를 사용하는 경우입니다. 이때 Promise.all 또는 Promise.allSettled를 사용했었던 것을 기억하실 겁니다. 이것을 for문을 사용해 적용해 보겠습니다. 

 

const promise1 = Promise.resolve('SUCCESS 1');
const promise2 = Promise.resolve('SUCCESS 2');
( async () => {
    for await (promise of [promise1, promise2]){
        console.log(promise);
    }
} )();

 

 

위 예제에서는 for await of문을 이용해서 프로미스 배열을 반복적으로 사용하게 되었습니다. 여기서 async 함수의 리턴 값은 항상 Promise로 감싸지게 되므로 실행 후 then을 붙이거나 또다른 async 함수 내에서 await를 붙여 처리가 가능합니다.

 

async function findAndSaveUser(Users){
    // 생략
}

findAndSaveUser().then(() => { /* 생략 */ });
// or
async function other(){
    const result = await findAndSaveUser();
}

 

 

 

** 위 내용은 추후 학습하는 타이머 관련 모듈 사용법에서 다시 튀어나옵니다. 이해가 가지 않는다면 아래 아티클과 순환하여 읽어보도록 합시다.

 

 

4. Node 기능 살펴보기 (3) - 노드 내장 객체 : 타이머2

앞선 아티클에서, 타이머 함수와 관련된 예제를 실행시켜 보고 결과도 예측해 보았습니다. 예제와 결과, 그리고 초별 타임라인에서 함수가 실행되는 과정을 다시 한번 아래와 같이 살펴보겠습

nozeroslope.tistory.com