2017-08-05 3 views
0

ich eine Funktion wie dieseAsync: Rückkehr von Funktionen in Wasserfall-Methode

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

In Myservice.validate nenne es eine async waterfall Funktion eine Validierung macht jede Validierungsregeln in einzelnen Funktion ausführen, wenn einer ausfällt ich will zurück

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

} 

zurückzukehren Aber wenn einer der Validierung die Rückkehr versagt nicht, dh Arbeits

return callback({'status':false}) gefeuert nie

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

Antwort

2

Warum Sie Rückruf von der ersten Funktion in Wasserfall zu nennen versuchen. Rufen Sie stattdessen seinen Rückruf, d. H. Nextvalidation mit err set. Ich denke, Sie müssen etwas mehr über asyncwasserfall lesen. Für eine Verwendung Validate Funktion Hinweis wie diese -

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

Ich habe dies bereits versucht, aber dieser Ansatz führt alle Validierungsfunktionen, auch wenn erste Funktion fehlschlägt – Jabaa

+0

die Antwort bearbeitet, sein für mich arbeiten. Ändern Sie den Stub für verschiedene Eingaben und versuchen Sie es. Lass es mich wissen, wenn irgendein Problem da ist. –

+0

Irgendwas Glück? Es funktioniert? –

Verwandte Themen