2016-12-28 4 views
3

Я работаю с async.waterfall и nodejs. Он работает очень хорошо, но теперь у меня вопрос о потоке.nodejs и async.waterfall с условиями if и условными функциями.

Я хочу использовать простое условие if в потоке async.waterfall.

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 заявления внутри массив, но я думаю, что вы ищете:

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 (результаты); } 'с' callback' – GilZ

+0

да, это правильно, спасибо –

+0

wow .. спасибо за быструю обратную связь. Я попробую это сейчас .. Спасибо Фил .. – philipfwilson