Promise 메소드
Promise.all()
Promise.all()은 요소 전체가 프로미스인 배열을 받고 새로운 프로미스를 반환한다. 모든 프로미스가 이행될 때 까지 기다렸다가 그 결과값을 담은 배열을 반환하지만, 주어진 프로미스중 하나라도 실패하면, Promise.all이 거부되고, 이행된 결과는 무시한다.
let promise = Promise.all([....promises...])
Promise.allSettled()
최근에 추가된 메소드로, 모든 프로미스가 처리될 때까지 기다렸다가 그 결과(객체)를 담은 배열을 반환한다.
let urls = [
'https://api.github.com/users/iliakan',
'https://api.github.com/users/remy',
'https://no-such-url'
];
Promise.allSettled(urls.map(url => fetch(url)))
.then(results => { // (*)
results.forEach((result, num) => {
if (result.status == "fulfilled") {
alert(`${urls[num]}: ${result.value.status}`);
}
if (result.status == "rejected") {
alert(`${urls[num]}: ${result.reason}`);
}
});
});
fetch를 사용해 여러 사람의 정보를 가져오고 있다고 가정한다면, 여러 요청 중 하나가 실패해도 다른 요청 결과는 여전히 있어야한다. 이럴때 Promise.allSettled를 사용할 수 있다.
- 응답이 성공할 경우: {status: "fulfilled", value: result}
- 응답이 실패할 경우: {status: "rejected", value: error}
위의 코드의 result는 이렇게 담긴다.
[
{status: "fulfilled", value: ....응답},
{status: "fulfilled", value: ...응답},
{status: "rejected", reasone: ...에러 객체},
]
Promise.race()
Promise.all과 비슷하지만, 가장먼저 처리된 프로미스의 결과 또는 에러를 담은 프로미스를 반환한다.
let promise = Promise.race([iterable]);
Promise.resolve/reject (async/await 문법이 생긴 뒤로 잘 사용되지 않는다.)
.resolve()는 결과 값이 value인 이행 상태 프로미스를 생성한다.
//이 코드와 동일한 일을 수행한다.
let promise = new Promise(resolve => resolve(value));
Promise.resolve(data)
Promise.prototype.Methods
.then() (Promise.prototype.then())
then메소드는 프로미스를 리턴하고 두개의 콜백함수를 인수로 받는다. 하나는 프로미스가 이행(fulfilled)했을 때, 다른 하나는 거부했을 때를 위한 콜백함수이다.
const promiseA = new Promise((resolve, reject) => {
resolve('Success!');
//또는 reject("Error!!");
})
promiseA.then((data) => {
console.log(data);
})
.catch((err) =>{
consoel.log(err);
})
.catch() (Promise.prototype.catch())
'FE BE 개발 메모장 > Javascript' 카테고리의 다른 글
ES-6 문법 정리 (0) | 2021.02.10 |
---|---|
구조 분해 할당 (0) | 2021.02.08 |
JSON에 대하여 (0) | 2021.02.03 |
async & await (0) | 2021.02.02 |
Promise (0) | 2021.02.01 |