问个异步控制的问题
发布于 9 年前 作者 ilovelll 3823 次浏览 最后一次编辑是 8 年前 来自 问答

现有两个任务,第一个在数据库查询,返回如果没有结果就进行第二个任务新建,如果有结果就结束任务。如果用async的话怎么实现? 原来用if else挺简单的,就是想如果用async模块的话该怎么写

12 回复

我觉得 async 不是很适合这个任务,用 eventproxy 吧。https://github.com/JacksonTian/eventproxy

我喜欢 promise + co 大法

同意一楼的建议。async 不好用,eventproxy 对于代码的耦合度非常低。 不过,我看楼主的需求,直接 在第一次 查询的回调函数 里 进行if 判断不就得了?

@359056163 嗯,原来是这样写的,不过后面还有任务,后面几个任务不用判断直接用的async,组长检查代码让我把第一个任务也加到async里,实在不知道怎么合适地加进去。。。

两个任务自己写就可以了

一定用async的话,就用它的waterfall方法,然后再在里面自行判断一下? 自豪地采用 CNodeJS ionic

@DavidCai1993 自行判断后怎么跳出不执行后面的任务

@ilovelll 判断后如果数据查到了,就不再继续查,直接再不查询并把这一步的结果写成null,然后在最后的回调函数里直接拿结果数组里那个不为null的值? 自豪地采用 CNodeJS ionic

@DavidCai1993 第三句话没有听懂

好像是这么写的吧: async.waterfall([function(cb) {col.findOne({_id: oi}, cb);}, function (r, cb) {if ( r ) return cb(); col.insertOne(obj, cb)}], function (err) {});

问题已经搞定,谢谢各位,附伪代码:

async.auto({
isExist: function (callback) {
model.getData(callback)
},
insert: ['isExist', function (callback, results) {
console.log(results)
if (results.isExist.length==0) {//判断是否存在
model.saveData(callback);
} else{
callback && callback(null, results)
}
}],
update: ['insert', function (callback) {
model.updateData(callback);
}]
}, function (err, resultss) {
callback && callback(err, resultss)
})
回到顶部