프로미스 활용하기
Promise.all
- 여러 개의 프로미스를 병렬로 처리할 때 사용한다
- 하나라도 rejected되면 Promise.all이 반환하는 프로미스도 rejected된다
requestData1().then(data => console.log(data));
requestdata2().then(data => console.log(data));
Promise.all([requestData1(), requestData2()]).then([data1, data2] => {
console.log(data1, data2);
});
- 연속된 then 메소드에서 앞의 then 메소드에서 사용한 변수를 참조하고 싶을 때 사용할 수도 있다
requestData1()
.then(data1 => {
return requestData2(data1);
})
.then(data2 => {
});
requestData1()
.then(data1 => {
return requestData2(data1)
.then(data2 => {
});
});
requestData1()
.then(data1 => {
return Promise.all([data1, requestData2(data1)]);
})
.then([data1, data2] => {
});
Promise.race
- 여러 개의 프로미스 중에서 가장 빨리 처리된 프로미스를 반환한다
Promise.race([
requestData(),
new Promise((_, reject) => setTimeout(() => reject("TIME OVER"), 3000)
])
.then(data => console.log(data))
.catch(err => console.log(err))
프로미스를 활용한 데이터 캐싱
- settled 상태가 되면 그 상태를 유지하는 프로미스의 성질을 이용해서 데이터를 캐싱할 수 있다
let cachedPromise;
function getData() {
cachedPromise = cachedPromise || requestData();
return cachedPromsie;
}
getData().then(data => console.log(data));
getData().then(data => console.log(data));