Node.js 콜백 함수의 원리와 사용법

콜백 함수는 Node.js의 일반적인 비동기 프로그래밍 패턴입니다. 작업이 완료된 후 특정 코드를 실행할 수 있습니다. 콜백 함수는 I/O 작업, 이벤트 처리 및 비동기 작업을 처리할 때 매우 일반적입니다. 이 기사에서는 Node.js 콜백 함수의 원리, 사용법 및 몇 가지 일반적인 문제를 자세히 소개합니다.

콜백 함수란?

콜백 함수는 고차 함수, 즉 다른 함수에 매개 변수로 전달되어 나중에 호출되는 함수입니다. 비동기 프로그래밍에서 콜백 함수는 종종 파일 읽기, 네트워크 요청 전송 또는 이벤트 처리와 같은 지연된 작업을 처리하는 데 사용됩니다.

콜백 함수의 일반적인 특징은 다음과 같습니다.

  • 함수를 다른 함수의 인수로 전달합니다.
  • 작업이 완료된 후 함수를 실행합니다.
  • 일반적으로 오류 우선 규칙이 사용됩니다. 즉, 콜백 함수의 첫 번째 인수는 오류 개체(오류가 있는 경우)이고 후속 인수는 반환된 데이터입니다.

Node.js는 I/O 차단을 피하고 동시성과 성능을 향상시키기 위해 콜백 함수를 사용합니다.

콜백 기능을 사용하는 방법

Node.js에서 콜백 함수를 사용하는 일반적인 흐름은 다음과 같습니다.

  1. 파일 읽기 또는 네트워크 요청 보내기와 같이 느리게 실행해야 하는 작업을 정의합니다.
  2. 함수의 매개변수 목록에서 콜백 함수를 정의합니다.
  3. 콜백 함수는 작업이 완료된 후 호출되어 결과 또는 오류를 인수로 전달합니다.

다음은 콜백 함수를 사용하여 파일을 읽는 방법을 보여주는 간단한 예입니다.

const fs = require('fs');

function readFile(filename, callback) {
    
    
  fs.readFile(filename, 'utf8', (err, data) => {
    
    
    if (err) {
    
    
      callback(err); // 处理错误
    } else {
    
    
      callback(null, data); // 处理数据
    }
  });
}

readFile('example.txt', (err, data) => {
    
    
  if (err) {
    
    
    console.error('Error:', err);
  } else {
    
    
    console.log('Data:', data);
  }
});

위의 코드에서 readFile함수는 파일 이름과 콜백 함수라는 두 개의 매개 변수를 허용합니다. Node.js의 메소드를 사용하여 fs.readFile파일 내용을 읽고, 읽은 결과에 따라 콜백 함수를 호출합니다. 오류가 발생하면 오류 개체가 첫 번째 매개 변수로 콜백 함수에 전달되고 파일 읽기에 성공하면 데이터가 두 번째 매개 변수로 콜백 함수에 전달됩니다.

오류 처리

콜백 함수에서 오류 처리를 수행하는 것이 매우 중요합니다. 일반적으로 규칙 콜백 함수의 첫 번째 인수는 작업이 성공했는지 여부를 나타내는 오류 객체입니다. 작업이 성공하면 오류 개체는 null또는 이고 undefined, 작업이 실패하면 오류 개체를 통해 오류 정보가 전달됩니다.

다음은 콜백 함수에서 오류를 처리하는 방법을 보여주는 예입니다.

function doSomething(callback) {
    
    
  // 模拟一个异步操作
  setTimeout(() => {
    
    
    const success = Math.random() < 0.5;
    if (success) {
    
    
      callback(null, 'Success');
    } else {
    
    
      callback(new Error('An error occurred'));
    }
  }, 1000);
}

doSomething((err, result) => {
    
    
  if (err) {
    
    
    console.error('Error:', err);
  } else {
    
    
    console.log('Result:', result);
  }
});

위의 코드에서 doSomething함수는 비동기 작업을 시뮬레이트합니다. 성공적으로 완료되면 콜백 함수가 호출되어 데이터가 전달되고, 오류가 발생하면 콜백 함수가 호출되어 오류 개체가 전달됩니다.

콜백 지옥과 해결책

복잡한 비동기 작업에서 여러 콜백 함수를 사용하면 혼란스럽고 유지 관리할 수 없는 코드가 생성될 수 있으며 이를 "콜백 지옥"이라고 합니다. 이 문제를 해결하기 위해 다음과 같은 방법을 채택할 수 있습니다.

  1. 명명된 함수 사용: 각 콜백 함수를 별도의 명명된 함수로 정의한 다음 비동기 작업에 인수로 전달합니다.
  2. 약속 사용: 약속은 더 깨끗하고 읽기 쉬운 코드 구조를 제공하는 비동기 프로그래밍의 새로운 패러다임입니다.

다음은 약속을 사용하는 예입니다.

const fs = require('fs').promises;

function readFile(filename) {
    
    
  return fs.readFile(filename, 'utf8');
}

readFile('example.txt')
  .then(data => {
    
    
    console.log('Data:', data);
  })
  .catch(err => {
    
    
    console.error('Error:', err);
  });

위의 코드에서 fs.readFile메서드는 Promise를 반환하는데, Promise는 를 .then()통해 작업의 성공과 .catch()실패를 처리할 수 있습니다.

결론적으로

콜백 함수는 작업이 완료된 후 특정 코드를 실행할 수 있도록 하는 Node.js 비동기 프로그래밍의 중요한 개념입니다. 이 글에서는 콜백 함수의 원리와 사용법, 오류 처리 방법, 콜백 지옥 문제를 피하는 방법에 대해 자세히 소개합니다. 또한 Promise 사용에 대한 대안이 제시됩니다.

추천

출처blog.csdn.net/weixin_43025343/article/details/131894905