자바스크립트 - promise 2

Promise.resolve()

Promise.resolve( /*value*/ );


Promise.resolve(new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('foo');
    }, 1000);
})).then((data) => {
    console.log(
        '프로미스 객체인 경우, resolve 된 결과를 받아서 then이 실행된다.',
        data,
    )
});

Promise.resolve('bar').then(data => {
    console.log('then 메서드가 없는 경우, fulfilled 됩니다.', data)
})

// 객체가 promise 객체인지 데이터 객체인지 모를경우는 promise.resolve를 사용하면 편하다. 

Promise.reject

Promise.reject(new Error('무슨무슨이유'))
    .then(error => {})
    .catch(error => {
        console.log(error);
    })

promise.reject를 사용해서 바로 오류메세지를 보내는 경우는 많지 않으니 그냥 이런게 있다 정도로만 알아두자.

Promise.all

프로미스 객체 여러개를 생성하며, 배열로 만들어 인자로 넣고 Promise.all을 실행하면, 배열의 모든 프로미스 객체들이 fulfilled 되었을 때 then의 함수가 실행된다. then의 함수의 인자로 프로미스 객체들의 resolve 인자값을 배열로 돌려준다.


function p(ms) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(ms);
        }, ms);
    })
}

Promise.all([p(1000), p(2000), p(3000)]).then((messages) => {
    console.log('모두 fulfilled 된 이후에 실행된다.', messages)
}) //3초 후에 출력됨

Promise.race

프로미스 객체 여러개를 생성하여 배열로 만들어 인자로 넣고 Promise.race를 실행하면, 배열의 모든 프로미스 객체들 중 가장 먼저 fulfilled 된 것으로,then의 함수가 실행됩니다. then의 함수의 인자로 가장 먼저 fulfilled 된 프로미스의 객체의 resolve 인자값을 돌려준다.


function p(ms) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(ms);
        }, ms);
    })
}

Promise.race([p(1000), p(2000), p(3000)]).then((message) => {
    console.log('가장 빠른 하나가 fulfilled 된 이후에 실행된다.', message)
})// log 문구와 제일 빠른 프로미스인 p(1000)의 데이터값인 1000이 출력되지만 p(2000)과 p(3000)까지 실행 된 뒤에 종료된다.

좋은 웹페이지 즐겨찾기