실패에 관계없이 Promise 처리
네트워크 요청과 관련된 일련의 Promise로 작업할 때 일부 요청이 발생하는 시나리오를 처리해야 하는 경우가 많습니다. 실패할 수 있습니다. 기본적으로 Promise.all()은 첫 번째 거부가 발생하면 조기에 종료됩니다. 그러나 어떤 상황에서는 실패한 Promise라도 모든 Promise가 완료될 때까지 기다리고 싶을 수도 있습니다.
권장 패턴
한 가지 접근 방식은 Reflect() 함수는 Promise를 이행되거나 거부된 속성이 있는 상태 객체로 확인되는 Promise로 변환합니다. 배열의 Promise를 Reflect() 함수에 매핑하면 상태에 관계없이 모든 Promise가 완료되도록 할 수 있습니다.
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" })); Promise.all(arr.map(reflect)).then(results => { const success = results.filter(x => x.status === "fulfilled"); });
이 예에서는 Promise.all()이 수정된 Promise.all()과 함께 사용됩니다. 모든 약속이 완료되기를 기다리는 약속의 배열입니다. 성공 배열에는 성공적인 Promise의 결과가 포함되어 네트워크 장애를 적절하게 처리하고 사용 가능한 데이터를 기반으로 작업을 계속 진행할 수 있습니다.
향상된 솔루션(Promise.allSettled)
최신 JavaScript에는 원하는 동작을 달성하기 위한 보다 간결하고 효율적인 방법을 제공하는 Promise.allSettled가 내장되어 있습니다. 이는 Promise의 결과에 관계없이 각각 이행 또는 거부 상태를 포함하는 일련의 결과로 확인되는 Promise를 반환합니다.
Promise.allSettled([promise]).then(([result]) => { // reach here regardless // { status: "fulfilled", value: 33 } });
위 내용은 JavaScript에서 모든 Promise(실패한 Promise 포함)를 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!