2014-12-11 3 views
1

자바 스크립트에 새로운 기능이 추가되었습니다. 노드 JS/Restify에 대한 비동기 모듈의 waterfall 메서드에 따라 일련의 함수를 실행하려고합니다. 이 방법의 가장 큰 장점은 현재 콜백의 "결과"를 다음 콜백으로 전달할 수 있다는 것입니다. 따라서 "폭포"를 깨고 다음 미들웨어를 실행할 가능성이 있습니다.async.waterfall로 스코프를 분실했습니다.

문서에 설명 된대로 인수는 함수 배열과 마지막 미들웨어입니다.

그래서 설정 내 기능 아래의 코드에 따라와

var fn1 = function(callback){ 
    console.log(req.params.user_id); 
    callback(null, req.params.user_id); 
}; 

var fn2 = function(user_id, callback){ 
    console.log(user_id); 
    callback(); 
} 

server.get('/:user_id', 
    function(req, res, next){ 
     async.waterfall([fn1, fn2], 
     function(err, result){ 
      next(); 
     }) 
    }, 
    ...(next middleware) 
) 

를 호출하고 REQ 객체를 정의하지 않는 한 내가 예상 결과를 얻고 있지 않다. 그러나이 작업을 수행 할 때 :

server.get('/:user_id', 
     function(req, res, next){ 
      async.waterfall([ 
       function(callback){ 
        console.log(req.params.user_id); 
        callback(null, req.params.user_id); 
       }, 
       function(user_id, callback){ 
        console.log(user_id); 
        callback(); 
       } 
      ], 
      function(err, result){next()}); 
     }, 
     ...(next middleware) 
) 

결과가 예상되고 req 개체는 기능 1 (fn1)의 범위에서 잘 정의되어 있습니다.

그래서 나는 아주 기본적인 뭔가를 놓친 거지하지만

답변

1

클로저는 함수에서 생성되는 범위에서 작동 어디서부터 시작 .. 전혀 없이도

감사하지 않는 것 같아요. 범위가 그들이 실행되지 않음 예를 들어 다음과 같이 작동해야합니다.

server.get('/:user_id', function(req, res, next) { 
    var fn1 = function(callback){ 
     console.log(req.params.user_id); 
     callback(null, req.params.user_id); 
    }; 

    var fn2 = function(user_id, callback){ 
     console.log(user_id); 
     callback(); 
    } 

    async.waterfall([fn1, fn2], 
    function(err, result){ 
     next(); 
    }); 
}); 
+0

고맙습니다! 나는이 사실을 몰랐다. – nullpointer

관련 문제