异步:从瀑布方法中的函数返回

时间:2017-08-05 04:52:28

标签: javascript node.js express sails.js async.js

我正在调用一个像这样的函数

MyService.validate(params,function(err,response){
     //results from validate 
     console.log(response);
})

Myservice.validate中,有一个异步waterfall函数正在执行  验证每个验证规则在单个函数中运行,如果任何一个验证失败,我想返回

//run validations here
validate:function(params,callback){

   async.watefall([

     function (nextValidation){
      if(params.length<8){
         //returns to MyService.validate callback
         return callback({'status':false})
      }
      nextValdation();
     },
     function (finalCallback){

     if(params.name!='foo'){
         //returns to MyService.validate callback
         return callback({'status':false})
      }
      finalCallback();

     }


],function(err,response){
   //all validation rules passed 
   return callback({'status':true})
})

}

但如果其中一个验证失败,则返回无效,即

return callback({'status':false})从未解雇

if(params.length<8){ 
         //never fired
         return callback({'status':false})
      }

1 个答案:

答案 0 :(得分:2)

为什么要尝试从瀑布中的第一个函数调用回调。而是调用它的回调,即使用err set进行nextvalidation。我想你需要阅读更多关于async.waterfall的内容。对于提示,请使用像这样的验证函数 -

var async = require('async');

var validate=function(params,callback){

   async.waterfall([

     function (nextValidation){
      if(params.length<8){
         //returns to MyService.validate callback
         nextValidation({'status':false})
      }
      else nextValidation();
     },
     function (nextValidation){

     if(params.name!='foo'){
         //returns to MyService.validate callback
         nextValidation({'status':"random"})
      }
      else nextValidation();

     }


],function(err,response){
   //all validation rules passed
   if(err) return callback(err);
   else return callback({'status':true})
})

}

validate("1234",function(err,response){
    if(err) console.log(err);
    else console.log("all set");
})