2017-08-05 59 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

運氣好嗎?這是工作? –