>  기사  >  웹 프론트엔드  >  Promise.all 체인 내에서 개별 Promise 오류를 어떻게 처리할 수 있나요?

Promise.all 체인 내에서 개별 Promise 오류를 어떻게 처리할 수 있나요?

DDD
DDD원래의
2024-11-02 06:33:29913검색

How Can You Handle Individual Promise Errors Within a Promise.all Chain?

Promise.all의 오류 처리

Promise.all은 일련의 Promise로 작업할 때 동시 해결을 허용합니다. 그러나 Promise 중 하나에서 오류가 발생하면 전체 체인이 거부되어 다른 성공적인 해결이 모호해집니다. 이 문서에서는 Promise.all 체인 내에서 개별 Promise 오류를 효과적으로 처리하는 과제를 다룹니다.

Promise.all은 "전부 아니면 전무" 원칙을 고수합니다. 모든 Promise의 해결된 값으로 구성된 배열로 해결되거나 단일 Promise에 오류가 발생하는 즉시 거부됩니다. 결과적으로, 다른 Promise에서 발생할 수 있는 오류는 눈에 띄지 않습니다.

개별 Promise 오류를 처리하기 위해 일부 라이브러리는 배열에 있는 모든 Promise의 해결 또는 거부를 기다리는 Promise.when과 같은 대안을 제공합니다. 그러나 우리는 JavaScript의 기본 Promise.all을 사용하는 보다 일반적인 접근 방식에 중점을 둘 것입니다.

제공된 코드에서 사용자는 개별 Promise 오류를 가로채기 위해 catch 문을 추가하려고 시도하지만 불행히도 catch 블록은 이를 수행하지 않습니다. 활성화하지 마세요. 문제를 해결해야 하는 코드의 수정된 버전은 다음과 같습니다.

existingPromiseChain = existingPromiseChain.then(function() {
    var arrayOfPromises = state.routes.map(function(route){
        return route.handler.promiseHandler()
            .then(function(data) {
                return data;
            })
            .catch(function(err) {
                return err;
            });
    });
    return Promise.all(arrayOfPromises)
});

existingPromiseChain.then(function(arrayResolved) {
    // Process resolved values or errors from the Promises
});

// Always terminate the promise chain with a catch to capture any potential errors
.catch(function(err) {
    console.log(err.message); // Log error message if any coding error occurred
});

이 수정된 코드는 각 Promise(route.handler.promiseHandler())를 then/catch 블록으로 래핑합니다. 오류가 발생하면 catch 블록이 오류 객체를 반환하고, 이 객체는 Promise.all이 해결하는 배열에 포함됩니다.

Promise.all의 전부 아니면 전무 동작을 고수함으로써, 이 접근 방식을 사용하면 동시 Promise 해결의 이점을 누리면서 개별 Promise 오류를 정상적으로 처리할 수 있습니다. 따라서 개발자는 Promise.all이 제공하는 이점을 그대로 유지하면서 애플리케이션의 Promise 오류를 자신있게 처리할 수 있습니다.

위 내용은 Promise.all 체인 내에서 개별 Promise 오류를 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.