【问题标题】:Async:return from functions in waterfall method异步:从瀑布方法中的函数返回
【发布时间】:2017-08-05 14:21:37
【问题描述】:

我正在调用这样的函数

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

【问题讨论】:

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


    【解决方案1】:

    为什么您尝试从瀑布中的第一个函数调用回调。而是调用它的回调,即设置错误的 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");
    })
    

    【讨论】:

    • 我已经尝试过这种方法但是即使第一个功能失败,这种方法也会运行所有验证功能
    • 编辑了答案,它对我有用。更改不同输入的存根并尝试。如果有任何问题,请告诉我。
    猜你喜欢
    • 2017-08-03
    • 2017-04-26
    • 2016-01-13
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2016-03-03
    • 2023-03-15
    • 2018-03-22
    相关资源
    最近更新 更多