NodeJS Async Waterfall函数内部总是返回null

时间:2016-05-04 07:20:20

标签: node.js asynchronous

我调用一个函数,在函数内部有一个异步瀑布

validateInput = function(req) {

  async.waterfall([
    function(callback){
      if(req.body.username == null)
         return 'Username cannot be null';
      callback(null);
    }, function (callback){
      if(req.body.name == null)
         return 'Name cannot be null';
      callback(null);
    }
 ],function(err){});
}

以下是我如何调用函数

validateInput(req);

问题是它总是返回null。 如何调用函数使它不返回null?

2 个答案:

答案 0 :(得分:1)

即使发生错误,您也应始终致电callback() ...
尝试这样的事情:

validateInput = function(req) {
  async.waterfall([
    function(callback) {
      if (req.body.username == null)
         return callback(new Error('Username cannot be null'));
      callback(null, 'username is ok');
    },
    function (resultFromPreviousCallback, callback) {
      if (req.body.name == null)
         return callback(new Error('Name cannot be null'));
      callback(null, 'name is ok');
    }
 ],
 function(err, resultFromLastCallback) {
   // if err is null, all async.waterfall functions
   // did pass, otherwise, you get the first error
   // you can safely ignore `resultFromLastCallback`...
 });
 // you correctly do not return anything, here,
 // since this function is asynchronous...
}

对于您的用例,您可能会忽略函数的所有结果,因为您只对验证某些字段感兴趣... 但这种解释更为通用,并说明了async.waterfall ...

的用法

答案 1 :(得分:0)

validateInput = function(req) {

  async.waterfall([
    function(callback){
      if(req.body.username == null)
         return 'Username cannot be null';
      callback(null);
    }, function (callback){
      if(req.body.name == null)
         return 'Name cannot be null';
      callback(null);   //**Return whatever you want to return here**
    }
 ],function(err){});
}

基本上在使用此回调时,您可以使用类似的内容 回调(NULL,X)

此处出现的另一个案例将完全取决于您的用例意味着您是否希望此函数调用是异步的。 如果您向我提供您调用此函数的代码段,我可以提供更多帮助。