본문 바로가기

Javascript/Node

[Node] Promist Chainging, Promist.all

728x90
반응형

 

 

Promise Chaining 여러 개의 프로미스를 then으로 연결해주는 것이다.

 

테스트할 js 파일을 만들고 아래 소스를 추가한다.

아래 소스는 setTimeout 사용하여 1 후에 p1 text 찍고 3 후에 p2 텍스트를 찍는 소스다.

병렬적으로 실행 된다. (p1 실행 후 3초 뒤가 아닌 처음 실행 기준에서 3초)

const p1 = new Promise((resolve, reject) => {
    setTimeout( () => {
            resolve({ p1_text : "p1의 텍스트"});
    }, 1000);
});

const p2 = new Promise((resolve, reject) => {
    setTimeout( () => {
            resolve({ p2_text : "p2의 텍스트"});
    }, 3000);
});

p1.then( (result1) => {
    console.log("p1 = " + result1.p1_text);
    // return으로 promise 객체를 넘겨줌
    return p2;
}).then( (result2) => {
    console.log("p2 = " + result2.p1_text)
});

 

한 번에 여러개의 프로미스를 실행할 땐 primise.all을 사용하면 된다.

const p1 = new Promise((resolve, reject) => {
    setTimeout( () => {
            resolve({ p1_text : "p1의 텍스트"});
    }, 5000);
});

const p2 = new Promise((resolve, reject) => {
    setTimeout( () => {
            resolve({ p2_text : "p2의 텍스트"});
    }, 3000);
});

// Promise.all( [ ] )
Promise.all( [ p1, p2]).then( (result) => {
    console.log("p1 = " + result[0].p1_text);
    console.log("p1 = " + result[1].p2_text);
});

위 소스를 실행하게 되면 총 5초 뒤에 실행된다.

promise.all은 모든 작업이 끝난 후에 실행되기 때문이다.

즉 위 소스의 p1 5 , p2 3 실행으로 설정되어 있기 때문에 늦게 끝나는 p1 기준으로 5 뒤에 실행되는 것이다.

728x90
반응형

'Javascript > Node' 카테고리의 다른 글

[Node] node.js에서 DNS 주소 확인하기  (0) 2020.09.28
[Node] EventEmitter  (0) 2020.09.28
[Node] Promise  (0) 2020.09.23
[Node] npx란?  (0) 2020.09.23
[Node] node Semantic Versioning  (0) 2020.09.23