我想使用像async这样的库来控制NodeJS中的流。我检查了一下异步,它有串口,并口,瀑布,它们都不适合。瀑布看起来不错,但还不够。我的代码如下:
checkInMemcache(resultl, function(
{
if(!result) {
checkInMongo(result2, function(
{
if(result2) {
checkOther(result3, function() {
if else ..
})
} else {
.. do something
}
}
)
} else {
.. do something
}
}
)发布于 2014-02-02 01:36:45
看看这些很好的控制流模式。掌握它们将允许您在开始时不使用任何库来解决简单的并发/异步问题:
看看这个:http://book.mixu.net/node/ch7.html
另一个值得检查的好读物是:
http://trevorburnham.com/presentations/flow-control-with-promises/#/
下面是Promise/A规范的其他实现:
JQuery
的首选
承诺/A+
发布于 2014-02-02 02:00:58
我使用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
}这样的控制流的优点是它避免了回调嵌套。也可以通过创建一个shift() - functions数组并实现一个检查方法来实现类似的控制流,该方法从数组中检查next函数并执行它。如果该函数有结果,它将执行onResult()。否则,它会再次调用next(),依此类推,直到数组变为空。
Nimble模块非常小,它允许以这种方式执行串行、并行和混合流。
https://stackoverflow.com/questions/21086522
复制相似问题