2016-12-28 43 views
3

我一直在使用async.waterfall和nodejs。它的工作很好,但現在我有一個關於流量的問題。nodejs和async.waterfall如果條件和條件函數列表。

我想在async.waterfall流程中使用簡單的if條件。

async.waterfall([ 
    callOne, 
    callTwo, 
     if(condition > 0) { 
      callTest1, 
      callTest2, 
     }else{ 
      callTest3, 
      callTest4, 
     } 
    callThree, 
    callFour, 
    callFive, 
], function (err, result) { 
    if (err) { 
     return res.status(400).jsonp({error: err}); 
    } 
}); 

我只是想測試一個條件..

如果條件爲真

然後運行一些函數

其他

運行等功能。

ENDIF

清理

我是想這也太......一個async.waterfall調用兩個async.waterfall/s的

router.post('/testUser', function (req, res, next) { 

    ...... 


    function validateAccount(callback) { 
    if (config.CHECK_EMAIL_MEMBER_ID > 0) { 
        async.waterfall([ 
         callOne, 
         callTwo, 
          if(condition > 0) { 
           callTest1, 
           callTest2, 
          }else{ 
           callTest3, 
           callTest4, 
          } 
         callThree, 
         callFour, 
         callFive, 
        ], function (err, result) { 
         if (err) { 
          return res.status(400).jsonp({error: err}); 
         } 
        }); 
    } else { 
        async.waterfall([ 
         callOneb, 
         callTwob, 
          if(condition > 0) { 
           callTest1b, 
           callTest2b, 
          }else{ 
           callTest3b, 
           callTest4b, 
          } 
         callThreeb, 
         callFourb, 
         callFiveb, 
        ], function (err, result) { 
         if (err) { 
          return res.status(400).jsonp({error: err}); 
         } 
        }); 
    } 
} 




async.waterfall([ 
    setupUser, 
    testOne, 
    validateAccount, 
    sendEmail, 
], function (err, result) { 
    if (err) { 
     return res.status(400).jsonp({error: err}); 
    } 
}); 


}); 

回答

4

你當然不能使用內部的if聲明array,但我認爲你要找的是這樣的:

async.waterfall([ 
    callOne, 
    callTwo, 
    function (condition, callback) { 
     if (condition > 0) { 
      async.waterfall([ 
       callTest1, 
       callTest2 
      ], callback); 
     } else { 
      async.waterfall([ 
       callTest3, 
       callTest4 
      ], callback); 
     } 
    }, 
    callThree, 
    callFour, 
    callFive, 
], function (err, result) { 
    if (err) { 
     return res.status(400).jsonp({error: err}); 
    } 
}); 
+1

你可以用'function(results ){callback(results); }'with'callback' – GilZ

+0

是的,這是正確的,謝謝 –

+0

哇..感謝您的快速反饋。我會嘗試現在..謝謝菲爾.. – philipfwilson