nodeJs 콜백 간단한 예제


120

어느 누구에게 nodeJs 콜백의 간단한 예를 줄 수 있습니까? 이미 많은 웹 사이트에서 동일한 것을 검색했지만 제대로 이해할 수 없습니다. 간단한 예를 들어주세요.

getDbFiles(store, function(files){
    getCdnFiles(store, function(files){
    })
})

그런 걸하고 싶어요 ...


콜백을 인수로받는 함수를 작성하는 방법에 대한 예제?
Gntem 2013

예, 제가 이해하는 데 도움이되는 간단한 예입니다.
Bhushan Goel 2013

2
콜백은 매개 변수로 다른 함수에 전달하는 함수입니다 ... Google pls-> "callback javascript"-> 첫 번째 결과
Gabriel Llamas 2013

답변:


198
var myCallback = function(data) {
  console.log('got data: '+data);
};

var usingItNow = function(callback) {
  callback('get it?');
};

이제 노드 또는 브라우저 콘솔을 열고 위의 정의를 붙여 넣으십시오.

마지막으로 다음 줄과 함께 사용하십시오.

usingItNow(myCallback);

노드 스타일 오류 규칙과 관련하여

Costa는 노드 오류 콜백 규칙을 준수하면 어떻게 될지 물었습니다.

이 규칙에서 콜백은 첫 번째 인수 인 하나 이상의 인수를 오류로 수신해야합니다. 선택적으로 컨텍스트에 따라 하나 이상의 추가 인수가 있습니다. 이 경우 컨텍스트는 위의 예입니다.

여기서는이 규칙에서 예제를 다시 작성합니다.

var myCallback = function(err, data) {
  if (err) throw err; // Check for the error and throw if it exists.
  console.log('got data: '+data); // Otherwise proceed as usual.
};

var usingItNow = function(callback) {
  callback(null, 'get it?'); // I dont want to throw an error, so I pass null for the error argument
};

오류 사례를 시뮬레이션하려면 다음과 같이 usingItNow를 정의 할 수 있습니다.

var usingItNow = function(callback) {
  var myError = new Error('My custom error!');
  callback(myError, 'get it?'); // I send my error as the first argument.
};

최종 사용법은 위와 동일합니다.

usingItNow(myCallback);

동작의 유일한 차이점 usingItNow은 정의한 버전에 따라 달라집니다. 첫 번째 인수에 대한 콜백에 "진정한 값"(Error 객체)을 제공하는 버전 또는 오류 인수에 대해 null을 제공하는 버전입니다. .


그렇다면 첫 번째 매개 변수 규칙으로 오류가 발생하면 어떻게 보일까요?
Costa

113

콜백 함수는 단순히 함수가 나중에 호출 할 수 있도록 다른 함수에 전달하는 함수입니다. 이것은 일반적으로 비동기 API 에서 볼 수 있습니다 . API 호출은 비동기식이므로 즉시 반환되므로 API가 비동기 작업 수행을 완료했을 때 호출 할 수있는 함수를 전달합니다.

JavaScript에서 생각할 수있는 가장 간단한 예는 setTimeout()함수입니다. 두 개의 인수를받는 전역 함수입니다. 첫 번째 인수는 콜백 함수이고 두 번째 인수는 밀리 초 단위의 지연입니다. 이 함수는 적절한 시간 동안 기다린 다음 콜백 함수를 호출하도록 설계되었습니다.

setTimeout(function () {
  console.log("10 seconds later...");
}, 10000);

이전에 위의 코드를 본 적이 있을지 모르지만 전달하는 함수가 콜백 함수라는 것을 깨닫지 못했습니다. 더 명확하게하기 위해 위의 코드를 다시 작성할 수 있습니다.

var callback = function () {
  console.log("10 seconds later...");
};
setTimeout(callback, 10000);

콜백은 Node가하는 모든 작업에서 처음부터 비동기식으로 구축되기 때문에 Node의 모든 곳에서 사용됩니다. 파일 시스템과 대화 할 때에도. 이것이 바로 수많은 내부 Node API가 변수에 할당 할 수있는 데이터를 반환하는 대신 콜백 함수를 인수로 받아들이는 이유입니다. 대신 콜백 함수를 호출하여 원하는 데이터를 인수로 전달합니다. 예를 들어, Node의 fs라이브러리를 사용 하여 파일을 읽을 수 있습니다. fs모듈은 두 개의 고유 한 API의 기능을 표시합니다 : readFilereadFileSync .

readFile함수는 비동기식이지만 readFileSync분명히 그렇지 않습니다. 당신은 그들이 당신이 그들을 호출하기 때문에 가능하면 비동기 호출을 사용하려는 것을 볼 수 readFilereadFileSync대신 readFilereadFileAsync. 다음은 두 기능을 모두 사용하는 예입니다.

동기식 :

var data = fs.readFileSync('test.txt');
console.log(data);

위의 코드는의 모든 내용 test.txt을 메모리로 읽어 변수에 저장할 때까지 스레드 실행을 차단 합니다 data. 노드에서 이것은 일반적으로 나쁜 습관으로 간주됩니다. 간단하지만 지루한 작업을 수행하기 위해 간단한 스크립트를 작성하고 가능한 한 나노초마다 시간을 절약하는 데별로 신경 쓰지 않는 경우처럼 유용 할 때가 있습니다.

비동기 (콜백 포함) :

var callback = function (err, data) {
  if (err) return console.error(err);
  console.log(data);
};
fs.readFile('test.txt', callback);

처음에 우리는 두 개의 인수를 받아들이는 콜백 함수 작성 errdata. 비동기 함수의 한 가지 문제는 오류를 포착하기가 더 어려워 져 많은 콜백 스타일 API가 콜백 함수의 첫 번째 인수로 오류를 전달한다는 것입니다. err다른 작업을 수행하기 전에 값이 있는지 확인하는 것이 가장 좋습니다 . 그렇다면 콜백 실행을 중지하고 오류를 기록하십시오.

동기 호출은 예외가 발생했을 때 try/catch블록으로 간단히 포착 할 수 있기 때문에 이점이 있습니다 .

try {
  var data = fs.readFileSync('test.txt');
  console.log(data);
} catch (err) {
  console.error(err);
}

비동기 함수에서는 그렇게 작동하지 않습니다. API 호출이 즉시 반환되므로 try/catch. 콜백을 사용하는 적절한 비동기 API는 항상 자체 오류를 포착 한 다음 적절하다고 판단되는대로 처리 할 수있는 콜백에 해당 오류를 전달합니다.

콜백 외에도 일반적으로 사용되는 프라 미스라고하는 또 다른 인기있는 API 스타일이 있습니다. 그들에 대해 읽고 싶다면 여기 에서이 답변을 기반으로 작성한 전체 블로그 게시물을 읽을 수 있습니다 .


3
개념의 상당히 정교하면서도 간결한 전달; Node.js를 나 같은 초보 ...에 대한
kmonsoor

3
많은 맥락을 제공하는 +1. 콜백 함수는 어떻게 생겼는지뿐만 아니라 그 기능, 사용 이유 및 많이 사용되는 이유입니다. 초보자에게 정말 도움이됩니다.
Azurespot

1
큰! 이것은 그 자체로 게시물이 될 수 있습니다!
Pablo Glez 2018 년

1
그것은이고 약속에 대한 두 번째 부분을 포함합니다 ;)
Chev

1
이것은 받아 들여진 대답보다 훨씬 더 나은 설명입니다! 문제를 해결하는 코드뿐만 아니라 문제를 해결하는 이유 와 해결 방법도 여기에 포함됩니다. 기본적 으로이 답변과 콜백 지옥은 콜백이 무엇인지에 대한 확실한 이해를 제공합니다.
RusI

10

여기에 텍스트 파일을 복사하는 예입니다 fs.readFilefs.writeFile:

var fs = require('fs');

var copyFile = function(source, destination, next) {
  // we should read source file first
  fs.readFile(source, function(err, data) {
    if (err) return next(err); // error occurred
    // now we can write data to destination file
    fs.writeFile(destination, data, next);
  });
};

그리고 이것이 copyFile함수 사용의 예입니다 .

copyFile('foo.txt', 'bar.txt', function(err) {
  if (err) {
    // either fs.readFile or fs.writeFile returned an error
    console.log(err.stack || err);
  } else {
    console.log('Success!');
  }
});

일반적인 node.js 패턴은 콜백 함수의 첫 번째 인수가 오류임을 나타냅니다. 모든 제어 흐름 모듈이이 패턴에 의존하기 때문에이 패턴을 사용해야합니다.

next(new Error('I cannot do it!')); // error

next(null, results); // no error occurred, return result

2
다음은 뭔가요? 결과 변수는 무엇입니까 = 무엇이 호출됩니까?
Nomadic Coder

3
@SemicolonWarrier 저와 다른 사람들을위한 포인터 : stackoverflow.com/questions/5384526/javascript-node-js-next
kmonsoor

7

이 예제를 읽을 수있는 한 간단하게 시도해보십시오. save newfile.js do node newfile을 복사하여 애플리케이션을 실행하십시오.

function myNew(next){
    console.log("Im the one who initates callback");
    next("nope", "success");
}


myNew(function(err, res){
    console.log("I got back from callback",err, res);
});

3

우리는 다음과 같이 간단한 함수를 만들고 있습니다.

callBackFunction (data, function ( err, response ){
     console.log(response)
}) 

// callbackfunction 
function callBackFuntion (data, callback){
    //write your logic and return your result as
callback("",result) //if not error
callback(error, "") //if error
}

1
const fs = require('fs');

fs.stat('input.txt', function (err, stats) {
    if(err){
        console.log(err);
    } else {
        console.log(stats);
        console.log('Completed Reading File');
    }
});

'fs'는 파일 읽기를 도와주는 노드 모듈입니다. 콜백 함수는 'input.txt'라는 파일이 실행되기 전에 완전히 읽혀 졌는지 확인합니다. fs.stat () 함수는 파일 크기, 생성 날짜 및 수정 날짜와 같은 파일 정보를 가져 오는 것입니다.


1

//delay callback function
function delay (seconds, callback){
    setTimeout(() =>{
      console.log('The long delay ended');
      callback('Task Complete');
    }, seconds*1000);
}
//Execute delay function
delay(1, res => {  
    console.log(res);  
})


0

A callbackHigher Order Function( wikipedia )에 매개 변수로 전달되는 함수 입니다. 콜백의 간단한 구현은 다음과 같습니다.

const func = callback => callback('Hello World!');

함수를 호출하려면 정의 된 함수에 다른 함수를 인수로 전달하면됩니다.

func(string => console.log(string));

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.