[Node.js] callback 패턴

Woong·2023년 1월 9일
0

Nestjs

목록 보기
19/28
  • callback : 작업 결과를 전달해주기 위해 사용하는 함수

    • 작업이 완료되면 작업 결과를 가지고 호출
    • CPS(continuation-passing style) (연속 전달 방식)
    • 결과를 리턴하는 대신 다른 콜백으로 전달
  • 비동기 함수 호출시 즉시 제어를 이벤트 루프에 돌려주고, 큐의 새로운 이벤트가 처리되도록 한다.

    • 결과는 이벤트 루프 다음 사이클에서 핸들러 (callback) 으로 전달
  • 마이크로 태스크

    • 현재의 작업이 완료된 후 바로 실행
    • 다른 IO 이벤트 발생 전 실행
    • process.nextTick() 으로 마이크로 태스크로 처리
    • 예정된 IO 보다 먼저 실행 -> IO 기아(startvation) 발생 위험
      • setImmediate() 는 예정된 IO 이후에 실행되므로 해당 위험 X
function test(filename, callback) {
  process.nextTick(() => callback(cache.get(filename)))
  • callback 이 함수 입력으로 들어갈 경우, callback 이 마지막으로 들어가는 것이 Node.js 표준
    • CPS 함수 오류는 콜백의 첫번째 인자로 전달
readFile('foo.txt', 'utf8', (err, data) => {
  if (err) {
    handleError(err)
  } else {
    processData(data)
  }
}
  • 오류 전파시, throw 하는 대신 콜백으로 전파
function test(filename, callback) {
  readFile(filename, 'utf8', (err, data) => {
    let parsed
    if (err) {
      return callback(err) // 에러 전파 후 빠져나옴
    }
    
    try {
      parsed = JSON.parse(data)
    } catch (err) {
      return callback(err) // 에러 전파
    }
    
    callback(null, parsed) // 데이터 전파
  })
}

reference

  • 서적 - Node.js 디자인 패턴 바이블

0개의 댓글