Node.js 오류 처리 패턴 이해하기(예시 포함)



비동기식 언어의 오류 처리는 고유한 방식으로 작동하며 예상치 못한 많은 문제를 제시합니다. Node.js에는 7가지 주요 오류 처리 패턴이 있습니다. 간단히 모두 확인해 보겠습니다.

Originally published on FullStack.Cafe - Never Fail Your Tech Interview Again



오류 반환 값



비동기적으로 작동하지 않는 가장 간단한 패턴입니다. 고려하다:

var validateObject = function (obj) {
    if (typeof obj !== 'object') {
        return new Error('Invalid object');
    }
};

오류 던지기



함수가 제 기능을 수행하고 오류 상황이 발생하면 단순히 오류를 발생시켜 구제 조치를 취하는 잘 확립된 패턴입니다. 불안정한 상태에 놓일 수 있습니다. 그들을 잡으려면 추가 작업이 필요합니다. 또한 오류가 비동기적으로 발생하기 때문에 try/catch에서 비동기 호출을 래핑해도 도움이 되지 않습니다. 이 문제를 해결하려면 도메인이 필요합니다. 도메인은 비동기식 try...catch를 제공합니다.

var validateObject = function (obj) {
    if (typeof obj !== 'object') {
        throw new Error('Invalid object');
    }
};

try {
    validateObject('123');
}
catch (err) {
    console.log('Thrown: ' + err.message);
}

오류 콜백



콜백을 통해 오류를 반환하는 것은 Node.js에서 가장 일반적인 오류 처리 패턴입니다. 오류 콜백 처리는 엉망이 될 수 있습니다(콜백 지옥 또는 파멸의 피라미드).

var validateObject = function (obj, callback) {
    if (typeof obj !== 'object') {
        return callback(new Error('Invalid object'));
    }
    return callback();
};

validateObject('123', function (err) {
    console.log('Callback: ' + err.message);
});

방출 오류



오류를 내보낼 때 오류는 관심 있는 구독자에게 브로드캐스트되고 구독된 순서대로 동일한 프로세스 틱 내에서 처리됩니다.

var Events = require('events');
var emitter = new Events.EventEmitter();

var validateObject = function (a) {
    if (typeof a !== 'object') {
        emitter.emit('error', new Error('Invalid object'));
    }
};

emitter.on('error', function (err) {
    console.log('Emitted: ' + err.message);
});

validateObject('123');

약속



비동기 오류 처리에 사용되는 약속입니다. 고려하다:

doWork()
.then(doWork)
.then(doError)
.then(doWork)
.catch(errorHandler)
.then(verify);

async/await로 시도...잡기



ES7 Async/await를 사용하면 개발자가 동기식으로 보이는 비동기 JS 코드를 작성할 수 있습니다.

async function f() {

  try {
    let response = await fetch('http://no-such-url');
  } catch(err) {
    alert(err); // TypeError: failed to fetch
  }
}

f();

Await-to-js 라이브러리



Javascript에서 try-catch 블록이 없는 async/await의 변형입니다. 고려하다:

import to from 'await-to-js';

async function main(callback) {
    const [err,quote] = await to(getQuote());
    if(err || !quote) return callback(new Error('No Quote found');
    callback(null,quote);
}

🔗출처: gist.github.com

Thanks 🙌 for reading and good luck on your interview!
Check more FullStack Interview Questions & Answers on 👉 www.fullstack.cafe

좋은 웹페이지 즐겨찾기