이런 코드를 발견했다.
await Promise.allSettled(SomthigPromiseList);
Promise는 비동기 처리를 할 수 있는 객체인건 알겠는데 Promise 속성을 사용하는건 처음 봤다.
내가 정리해두었던 Promise 개념 -> https://hancoco.tistory.com/72
개념
Promise.all()
Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환합니다. 주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부합니다. (링크)
Promise.allSettled()
Promise.allSettled() 메서드는 주어진 모든 프로미스를 이행하거나 거부한 후, 각 프로미스에 대한 결과를 나타내는 객체 배열을 반환합니다.
일반적으로 서로의 성공 여부에 관련 없는 여러 비동기 작업을 수행해야 하거나, 항상 각 프로미스의 실행 결과를 알고 싶을 때 사용합니다.
그에 비해, Promise.all()이 반환한 프로미스는 서로 연관된 작업을 수행하거나, 하나라도 거부 당했을 때 즉시 거부하고 싶을 때 적합합니다. (링크)
실질적 코드
// 이런 전제가 주어졌을 경우,
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
// 모두 성공해서 값을 모두 주거나,
// 하나라도 실패해서 rejected 값을 주거나.
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
// 중간에 실패를 해도 모든 값을 반환해준다
Promise.allSettled(promises)
.then((results) => results.forEach((result) => console.log(result.status)));
// expected output:
// "fulfilled"
// "rejected"
Promise 상태(states) 3가지
promise는 생성하고 종료될때까지 처리과정을 promise states(프로미스의 상태)라고 표시하며 총 세가지로 나눌 수 있다.
- pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
- fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
- rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
'프로그래밍 > javacscript' 카테고리의 다른 글
상속 : extends와 implements / 호출 : super() (0) | 2022.06.16 |
---|---|
[220403] 클래스 정리 (0) | 2022.04.22 |
[220331] Status Code : 500, MulterError : Unexpected field (0) | 2022.03.31 |
[220322] 자바스크립트로 달력만들기 (0) | 2022.03.23 |
[220129] promise를 활용한 자동차 레이싱 게임 (0) | 2022.02.27 |
댓글