2014-12-11 3 views
1

Я новичок в javascript, так что это может быть что-то тривиальное. Я пытаюсь запустить ряд функций последовательно в соответствии с методом водопада асинхронного модуля для Node JS/Restify. Основное преимущество этого метода заключается в том, что можно передавать «результаты» текущего обратного вызова на следующий и т. Д., Имея возможность разбить «водопад» и запустить следующее промежуточное программное обеспечение.Потеря области с 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

Смежные вопросы