异步有条件 如何实现?async库可以实现吗
发布于 8 年前 作者 wdragon1983 4738 次预览 最后一次回复是 8 年前 来自 问答
假如在一个 回调函数里面 有一段 逻辑
async.waterfall([
function(cb){
//查询用户表
dbDAO.select(usersql,function(err,users){
cb(err,results);
});
},function(results,cb){
if(A){
dbDAO.select(dogSql,function(err,users){
if(B){
执行代码快C
}else{
结束此次async
}
cb(err,results);
});
}else{
执行代码快C
cb(err,results);
}
}
],function(err,results){
//查到狗狗了,可以牵出来了
})
问题就是如果满足A 才执行一个异步方法,而异步方法返回里面根据返回结果判定是否执行 逻辑C 如果不满足条件A就不执行异步方法,直接执行逻辑C。
这样如果用上面的写法。A里面的异步方法其实不是在整个async执行顺序链里面的。 应该是有问题的。 这样的情况应该怎么写?
6 回复
没有看懂
要结束async链直接return callback(null, result, …)就好了
@Bingmang dbDAO.select(dogSql,function(err,users){
if(B){ 执行代码快C }else{ 结束此次async } cb(err,results);
});
@htoooth 主要表达意思就是 在异步调用里面有一个 方法。需要判断条件 然后执行代码。如果条件满足,他还要执行一个异步操作。根据操作判断是否结束整个异步链。如果不符合判断条件,直接走下面逻辑。
关键的问题是 在异步链里面的方法,需要判断条件才能决定是否执行另一个异步操作。 这样就不能把这个异步操作 放到异步链里面了。
何必纠结,就用
回调地狱那种写法呗,嵌套不多的话问题不大