๋๊ฐ ์ด์์ ํ๋ก๋ฏธ์ค๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ํ๋ฆ์ ์ ์ดํ ๋ ์ฌ์ฉํ๋ค. ์๋ฅผ๋ค์ด a ์ b ๋ผ๋ ๋น๋๊ธฐ ์์ ์ด ๋ชจ๋ ์๋ฃ๋๋ฉด c ๋ผ๋ ๋น๋๊ธฐ ์์ ์ ์งํํด์ผ ํ๋ค๊ณ ํ๋ฉด ์ด ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผํ ๊น๋ฅผ ์ ์ํ ๊ฒ์ด ํ๋ก๋ฏธ์ค ํจํด์ด๋ค.
๊ด๋ฌธํจํด์ด๋ค. ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ ๋์ค์ผ๋ก ๋ฏธ๋ค ๋ชจ๋ ์ค๋น๊ฐ ๋๋ฉด ์์ํ๋ค.
// request๋ promise ํจํด์ ๋น๋๊ธฐ ์ฌ์ฉ์ ์ ์ ํจ์๋ผ๊ณ ๊ฐ์
var p1 = request('https://');
var p2 = request('https://');
Promise.all([p1, p2])
.then(function(value) {
return request('http://');
})
.then(function(msg) {
console.log(msg);
});
์ด ๋ฐฐ์ด ์์ ๊ฐ์ promise, thenable, ์ฆ์๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ค. ํ์ฌ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํ ํ๋ก๋ฏธ์ค๊ฐ ๋ค์ด๊ฐ๋ค. ๋ค๋ง ์ด๋ ํ ๊ฐ์ด ๋ค์ด๊ฐ๋ ์๊ด์๋ค. ๊ทธ ์ด์ ๋ Promise.resolve()๋ก ์ ๊ทํ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ฐฐ์ด์์ ๊ฐ์ด ๋ฒ๋ฆผ์ฒ๋ฆฌ๋๋ฉด(reject) ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌดํจ์ฒ๋ฆฌ ๋์ด ๋ฒ๋ฆฐ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ผญ ์๋ฌ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋ถ์ด๋๋ก ํ์.
๊ฑธ์ ํน์ ๊ฒฝํฉ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ํจํด์ด๋ค. ๋จผ์ ์จ ๊ฒ๋ง ์คํ๋๋ค. ๋ฐฐ์ด ์์ ๊ฐ์ ์ด๋ค๊ฒ์ด ๋ค์ด๊ฐ๋ ์๊ด์๋ค. ์ฆ์๊ฐ์ด ๋ค์ด๊ฐ๋ ๋์ง๋ง ์ฆ์๊ฐ์ ์์๊ฐ 1 ์์๋ผ ์๋ฏธ๊ฐ ์๋ค.
์ฌ์ฉ๋ฒ์ all ๊ณผ ๋์ผํ๋ค.
๊ฒฝํฉ ํจํด์ ์ฌ์ฉํ๋ฉด ํ์์์ ํจํด์ ๊ตฌํํ ์ ์๋ค.
function timeoutPromise(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject('ํ์์์');
}, time);
});
}
Promise.race(foo, timeoutPromise(3000)).then(
function() {
//
},
function(err) {
// err
}
);