我正在调用一个像这样的函数
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})
}
答案 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");
})