Jabaa
Jabaa

Reputation: 1753

Async:return from functions in waterfall method

I am calling an a function like this

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

In Myservice.validate there is an async waterfall function is doing a validation each validation rules run in single function if any one fails i want to return back

//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})
})

}

But if one of the validation fails the return is not working ie

return callback({'status':false}) never fired

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

Upvotes: 0

Views: 188

Answers (1)

Amit Yadav
Amit Yadav

Reputation: 1039

Why you are trying to call callback from first function in waterfall. Instead call its callback i.e. nextvalidation with err set. I think you need to read little more about async.waterfall. For a hint use validate function like this -

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");
})

Upvotes: 2

Related Questions