2014-01-13 78 views
0

我想使用像async一樣的庫來控制NodeJS中的流程。我檢查了異步,它有系列,並行,瀑布,它們不適合。瀑布看起來不錯,但還不夠。我的代碼是這樣的:控制複雜流程nodejs

checkInMemcache(resultl, function(
{ 
    if(!result) { 
    checkInMongo(result2, function(
     { 
     if(result2) { 
     checkOther(result3, function() { 
      if else .. 
     }) 
     } else { 
     .. do something 
     } 
     } 
    ) 
    } else { 
    .. do something 
    } 
} 
) 
+0

promises如何[q](https://npmjs.org/package/q) – user568109

+0

讓我檢查:) ty – Windranger

+0

這不容易實現:(看起來像原始代碼.. – Windranger

回答

0

看看那些漂亮的控制流模式。抓他們將讓你沒有任何庫走在一開始簡單的併發/異步問題:

檢查這一個:http://book.mixu.net/node/ch7.html

另一個好讀值得一試的是:

http://trevorburnham.com/presentations/flow-control-with-promises/#/

以下是其他Promise/A規範實施的列表:

JQuery

承諾/ A +

0

我用nimble了點。我會創建一個檢查函數列表。每個檢查函數檢查某些存儲(檢查可以是同步的或異步的),並且只有在未找到值時才繼續下一個函數。否則,函數執行給定的回調並繼續下一步。

var flow = require('nimble'); 

flow.series([ 
    function checkInMemcache(callback) { 
    // get memResult 
    if (memResult) { // result found 
     onResult(result); 
    } else { // continue with the next step 
     callback(); 
    } 
    }, 
    function checkInMongo(callback) { 
    // check in MongoDB, like 
    mongo.asyncCheck(function(result) { 
     if (result) { // result found 
     onResult(result); 
     } else { // continue with the next step 
     callback(); 
     } 
    }); 
    }, 
    function checkOther(callback) { 
    // perform other checks 
    } 
]); 

function onResult(result) { 
    // do something 
} 

這樣的控制流的優點是它避免了回調嵌套。也可以通過創建一系列檢查函數並實現一個next()方法來實現沒有任何模塊的類似控制流程,該方法從數組中接下來的函數並執行它。如果該功能有結果,則執行onResult()。否則,再次調用next(),依此類推,直到數組變爲空。

Nimble模塊非常小巧,它允許以這種方式執行串行,並行和混合流程。