JS - Promise APIs
all()
Promise.all(iterable Object)
νλΌλ―Έν°μ λͺ¨λ Promise
μ²λ¦¬λ₯Ό μλ£νμ λ then
μ νΈλ€λ¬ ν¨μλ₯Ό μ€ννλ€. νλΌλ―Έν°μ μμ±λ μμλλ‘ Promise
μ μΈμ€ν΄μ€λ μμ±λκ³ μ€νλλ μμλ κ° μμ²μ λ°λΌ λ€λ₯Ό μ μλ€.
λͺ¨λ μμ²μ΄ μ’
λ£λμμΌλ©΄ then()
μ΄ μ€νλλ©΄μ κ° νλΌλ―Έν°μ resolve
κ°μ νλΌλ―Έν°μ μμ±λ μμλ‘ μ€μ νλ€.
const promiseDelay = (delay) => {
return new Promise(resolve => {
setTimeout(() => {
console.log(delay);
resolve(delay);
}, delay)
})
}
Promise.all([
promiseDelay(700),
promiseDelay(300),
promiseDelay(500)
]).then(param => console.log(param));
// 300
// 500
// 700
// [700, 300, 500]
μ€ν λμ€ reject
κ° λ°μνκ² λλ©΄ λͺ¨λ μμ²μ΄ λλκΈ°λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ reject
κ° λ°μν μμ μ rejected
μνμ λν νΈλ€λ¬ ν¨μλ₯Ό μ€ννκ² λλ©° fulfilled
μνμ λν νΈλ€λ¬ ν¨μλ νΈμΆ λμ§ μλλ€.
νλΌλ―Έν°μ λ±λ‘λ ν¨μλ λͺ¨λ μ€νλκΈ°λ νλ€. μ€κ°μ μ’
λ£λκ±°λ νμ§ μλλ€.
const promiseDelay = (delay) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
delay === 300 ? reject(delay) : resolve(delay);
}, delay)
})
}
Promise.all([
promiseDelay(700),
promiseDelay(300),
promiseDelay(500)
])
.then(param => console.log(param))
.catch(error => console.log(`Rejected: ${error}`));
// 300
// Rejected: 300
// 500
// 700
race()
Promise.race(iterable Object)
reject
, resolve
μ κ΄κ³ μμ΄ μ²μ νλ²λ§ μ€ννκ³ λ μ΄μ μ€ννμ§ μλλ€.
첫 μλ΅μ΄ reject λΌλ©΄ rejected μνμ νΈλ€λ¬ ν¨μκ° νΈμΆλκ³ λμ΄μ μ€νλμ§ μλλ€.
const promiseDelay = (delay) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
delay === 300 ? reject(delay) : resolve(delay);
}, delay)
})
}
Promise.race([
promiseDelay(700),
promiseDelay(300),
promiseDelay(500)
])
.then(param => console.log(`First resolved: ${param}`))
.catch(error => console.log(`Rejected: ${error}`));
// 300
// First resolved: 300
// 500
// 700
allSettled()
μμμ all
μ κ²½μ°λ ν μμ²μ΄λΌλ μ€ν¨νλ©΄ νΈλ€λ¬λ₯Ό νΈμΆνκ³ λ μ΄μ then
μ νΈμΆ νμ§ μλλ€.
μ΄μ μ 보μνκΈ° μν΄μμΈμ§ allSettled
λ λͺ¨λ μμ²μ λν κ²°κ³Όλ₯Ό νμΈ ν μ μλ API μ΄λ€.
rejected
μνκ° λ°μνλ€κ³ νμ¬λ catch λ±μ rejected νΈλ€λ¬ ν¨μκ° μ€νλμ§ μλλ€.
μ§μνλ λΈλΌμ°μ νμΈνμ
const promiseDelay = (delay) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
delay === 300 ? reject(delay) : resolve(delay);
}, delay)
})
}
Promise.allSettled([
promiseDelay(700),
promiseDelay(300),
promiseDelay(500)
])
.then(results => {
results.forEach(result => console.log(result));
})
.catch(errors => {
errors.forEach(error => console.log(error));
});
// 300
// 500
// 700
// {status: "fulfilled", value: 700}
// {status: "rejected", reason: 300}
// {status: "fulfilled", value: 500}
any()
race
λ fullfiled, rejected μκ΄ μμ΄ κ°μ₯ λ¨Όμ pending
μ΄ μ’
λ£λ μμ²μ λ°λΌ λμνλ€λ©΄ any
λ fullfilled
μνκ° κ°μ₯ λ¨Όμ λ μμ²μΌλ‘ μ§νλλ API μ΄λ€.
fullfilled
μνκ° λ μμ²μ μ²λ¦¬νλ―λ‘ rejected
νΈλ€λ¬ ν¨μκ° μ€νλμ§ μλλ€.
μ§μνλ λΈλΌμ°μ νμΈνμ
const promiseDelay = (delay) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
delay === 300 ? reject(delay) : resolve(delay);
}, delay)
})
}
Promise.any([
promiseDelay(700),
promiseDelay(300),
promiseDelay(500)
])
.then(value => console.log(`Any: ${value}`))
.catch(error => console.log(error));
// 300
// 500
// Any: 500
// 700