Bluebird Promise를 사용한 비동기 예외 처리
다음 시나리오를 고려해보세요. 애플리케이션을 충돌시키지 않고 제어된 환경에서 예외를 처리해야 합니다. Bluebird Promise를 사용하여 다음 특정 예를 살펴보겠습니다.
<code class="javascript">var Promise = require('bluebird'); function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ throw new Error("AJAJAJA"); }, 500); }); }</code>
setTimeout 콜백 내에서 예외가 발생하면 Node.js 이벤트 루프에 의해 캡처되어 콘솔에 기록되어 프로그램이 충돌하게 됩니다.
$ node bluebird.js c:\blp\rplus\bbcode\scratchboard\bluebird.js:6 throw new Error("AJAJAJA"); ^ Error: AJAJAJA at null._onTimeout (c:\blp\rplus\bbcode\scratchboard\bluebird.js:6:23) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
그러나 Promise는 생성자 콜백 내에서 발생한 예외를 캡처할 수 있습니다. 비동기 콜백 내에서 발생한 예외를 처리하려면 오류 발생 시 거부하는 프라미스로 콜백을 래핑해야 합니다.
<code class="javascript">function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ done(); }, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
이 수정된 예에서 예외는 주변 프라미스 체인에 의해 포착됩니다.
$ node bluebird.js Error [Error: Oh no!]
프라미스는 비동기 콜백에서 예외를 포착하지 않는다는 점을 기억하세요. 이러한 경우에는 항상 주변 Promise를 거부하고 필요한 경우 try-catch 블록을 사용하세요. 이 접근 방식을 사용하면 애플리케이션 충돌 없이 예외가 정상적으로 처리될 수 있습니다.
위 내용은 Bluebird Promise를 사용하여 비동기 콜백의 예외를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!