2016-09-05 2 views
0

콜백 함수를 만들려고하지만 계속 그 코드를 data is not a function에 전달하려고합니다. 다른 질문에 따라 설정했지만 작동하지 않는 것 같습니까? 경우노드가있는 콜백 요청

getRequest("http://", function(error, data){ 
    console.log(data); 
}); 

function getRequest(url, error, data) { 
    request({ 
     method: 'GET', 
     uri: url, 
     headers: { 
     'Content-Type': 'application/json', 
     'dataType': 'json'} 
    }, function (error, response, body){ 
     if(!error && response.statusCode == 200){ 

     data(JSON.parse(body)); 

     } else { 
     error(error); 
     } 
    }) 
} 
+1

당신은 두 개의 매개 변수로'getRequest'를 호출합니다. 그래서 세 번째'data' 매개 변수는'undefined'입니다. –

+0

알았지 만이 경우 어떻게 보이게 될까요? –

+0

[Bluebird] (http://bluebirdjs.com)와 같은 약속 라이브러리를 사용하여 콜백을 제어 할 수 있습니다. Chaining'then (...)'은 종종 함수 호출을 매칭하는 것보다 훨씬 쉽습니다. – tadman

답변

1

당신이 모두를 진행하려면, 성공과 실패의 결과가 하나의 콜백에서 당신은 당신의 코드 있다는 cb (또는 errordata를 호출 교체해야합니다.

getRequest("http://", function(error, data){ 
    if(error) throw error 
    console.log(data) 
}); 

function getRequest(url, cb, data) { 
    request({ 
     method: 'GET', 
     uri: url, 
     headers: { 
     'Content-Type': 'application/json', 
     'dataType': 'json'} 
    }, function (error, response, body){ 
     if(cb) { 
      cb(error, JSON.parse(body)) 
     } 
    }) 
} 

을 그렇지 않으면, 당신은해야 두 콜백이 모두 제공되는지 확인

function getRequest(url, success, error) { 
    request({ 
     method: 'GET', 
     uri: url, 
     headers: { 
     'Content-Type': 'application/json', 
     'dataType': 'json'} 
    }, function (error, response, body){ 
     if(error && failure) { 
     failure(error) 
     } else if(success) { 
     success(JSON.parse(body)) 
     } 
    }) 
} 

이 경우 두 가지 콜백 함수를 제공해야합니다. 먼저 성공 결과 덜 일반적인 패턴 인 오류에 대해서는 두 번째 오류입니다.

+0

'function (error, body)'형식의 단일 콜백을 사용하면보다 일관성이 있습니다. – tadman

+0

@tadman, 당신은 절대적으로 옳았습니다. 그것에 대해 발언을 추가했지만 OP 요구 사항에 맞는지 확실하지 않아 다른 옵션을 제공합니다. –

+2

Node.js는 일을 일관되게 유지하는 것에 대해 매우 신중합니다. 그리고 시작했을 때 이상하다고 생각하는 동안 습관이 코드를 훨씬 질서 정연하게 유지합니다. 모순 된 수십 가지 콜백 메소드가있는 이전부터의 와일드 웨스트 접근법은 역사 속으로 사라지고 있습니다. – tadman