我用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模塊非常小巧,它允許以這種方式執行串行,並行和混合流程。
promises如何[q](https://npmjs.org/package/q) – user568109
讓我檢查:) ty – Windranger
這不容易實現:(看起來像原始代碼.. – Windranger