>  기사  >  웹 프론트엔드  >  Bluebird Promise를 사용한 비동기 콜백에서 처리되지 않은 예외를 어떻게 처리합니까?

Bluebird Promise를 사용한 비동기 콜백에서 처리되지 않은 예외를 어떻게 처리합니까?

DDD
DDD원래의
2024-10-26 16:39:30947검색

How do you handle unhandled exceptions in asynchronous callbacks with Bluebird promises?

Bluebird Promise를 사용한 비동기 예외 처리

Q: Bluebird Promise를 사용한 비동기 콜백에서 처리되지 않은 예외를 어떻게 처리합니까?

Bluebird promise는 도메인과 달리 본질적으로 비동기 콜백에서 발생한 예외를 포착하지 않습니다.

A: Promise 생성자 또는 then() 클로저를 사용하여 예외 처리

비동기 콜백에서 예외를 포착하려면 콜백을 Promise 생성자 또는 then() 클로저로 래핑하세요.

<code class="javascript">function getPromise(){
    return new Promise(function(done, reject){
        setTimeout(function(){
            throw new Error("AJAJAJA");
        }, 500);
    }).then(function() {
        console.log("hihihihi");
        throw new Error("Oh no!");
    });
}</code>

사용자 정의 비동기 콜백에 던지는 것을 피하세요

절대 안 함 사용자 정의 비동기 콜백에서 직접 예외를 발생시킵니다(Promise 콜백 외부). 대신, 주변 Promise를 거부하세요:

<code class="javascript">function getPromise(){
    return new Promise(function(done, reject){
        setTimeout(done, 500);
    }).then(function() {
        console.log("hihihihi");
        reject(new Error("Oh no!"));
    });
}</code>

Promise 생성자 사용:

<code class="javascript">var p = getPromise();
    p.then(function(){
        console.log("Yay");
    }).error(function(e){
        console.log("Rejected",e);
    }).catch(Error, function(e){
        console.log("Error",e);
    }).catch(function(e){
        console.log("Unknown", e);
    });</code>

출력:

Error [Error: Oh no!]

이 접근 방식을 사용하면 예외를 적절하게 포착하고 처리하여 애플리케이션 충돌을 방지할 수 있습니다.

위 내용은 Bluebird Promise를 사용한 비동기 콜백에서 처리되지 않은 예외를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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