2017-08-05 29 views
0

我打电话了这样的函数异步:从功能瀑布方法的返回

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

回答

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

我已经试过,但这种方法运行所有即使第一函数失败 – Jabaa

+0

编辑答案,它为我工作的验证功能。更改不同输入的存根并尝试。如果有任何问题,请告诉我。 –

+0

运气好吗?这是工作? –