2016-05-04 20 views
0

を返す。ここNodeJS非同期滝は常にnull

validateInput = function(req) { 

    async.waterfall([ 
    function(callback){ 
     if(req.body.username == null) 
     return 'Username cannot be null'; 
     callback(null); 
    }, function (callback){ 
     if(req.body.name == null) 
     return 'Name cannot be null'; 
     callback(null); 
    } 
],function(err){}); 
} 

私は、関数を呼び出し、関数内で非同期の滝があり、私は、問題はそれが常にある

validateInput(req); 

関数を呼び出す方法ですnullを返します。 nullを返さないように関数を呼び出す方法は?基本的には

+0

返品の意味は? req本体に正しいデータがあることを確認していますか? –

+0

Req.bodyに正しいデータがあることを確認してください。しかし、 'validateInput(req).length'を呼び出すと、'不定型の長さ 'というプロパティを読み取れません。つまり、関数は何も返しません。関数が非同期であるため、非同期のウォーターフォールの内部で何かをスキップするようです。 – NoName2

+0

'validateInput(req)'戻り値は常に* undefined *になります。私の答えは、 'async.waterfall()'の使い方を理解するのを参照してください... – MarcoS

答えて

0
validateInput = function(req) { 

    async.waterfall([ 
    function(callback){ 
     if(req.body.username == null) 
     return 'Username cannot be null'; 
     callback(null); 
    }, function (callback){ 
     if(req.body.name == null) 
     return 'Name cannot be null'; 
     callback(null); //**Return whatever you want to return here** 
    } 
],function(err){}); 
} 

ここで生じている コールバック(NULL、X)

別のケースは完全にあなたのユースケース手段に依存するようにあなたが何かを使用することができ、このコールバックを使用して、あなたは、この関数の呼び出しになりたいんしながら、非同期かどうか。 この関数を呼び出す箇所からコードスニペットを私に提供した場合、私はもっと助けになることができます。以来、あなたはおそらく、関数からのすべての結果を無視することができ、あなたのユースケースについて

validateInput = function(req) { 
    async.waterfall([ 
    function(callback) { 
     if (req.body.username == null) 
     return callback(new Error('Username cannot be null')); 
     callback(null, 'username is ok'); 
    }, 
    function (resultFromPreviousCallback, callback) { 
     if (req.body.name == null) 
     return callback(new Error('Name cannot be null')); 
     callback(null, 'name is ok'); 
    } 
], 
function(err, resultFromLastCallback) { 
    // if err is null, all async.waterfall functions 
    // did pass, otherwise, you get the first error 
    // you can safely ignore `resultFromLastCallback`... 
}); 
// you correctly do not return anything, here, 
// since this function is asynchronous... 
} 

1

あなたは常にコールエラーが発生してもcallback()、...
はこのような何かを試してみてくださいいくつかのフィールドの検証にのみ関心があります... しかし、この説明はより一般的であり、async.waterfallの使用法を示しています。

+0

2番目の関数ではresult1を受け入れません。 –

+0

@NitishAgarwal:ありがとう、私はそれを更新しました... OPはおそらくこのケースでは 'results'を使用しませんが、あなたは正しいでしょう... – MarcoS

+1

もし*の結果が必要ないならば、 *前回のコールバックでは、すべての関数の結果を集約して最後のハンドラに渡す 'series'を使うべきです。 –