问题描述
使用Node.js操作MongoDB数据库时,遇到这样一个问题:
- 循环遍历一个数组Arr
- 在每个元素的基础上查询表A
- 在表A的查询结果的基础上,查询表B
- 整合表B的查询结果C,得到整个数组Arr的查询结果数据C_Arr
问题解决
使用Async的map函数:
async.map(objs, function (obj, callback) {
var query = {
查询条件
};
db.queryDataAll('表A', query, function (结果A_Arr) {
if(结果A_Arr的长度 > 0){
根据结果A_Arr处理obj
callback(null, obj); // 返回obj,在结果处理位置1
}else { // 否则,继续查表B
async.map([obj], function (obj1, callback1){
db.queryDataAll('表B', query, function (结果B_Arr) {
if(B_Arr的长度 > 0){
根据结果B_Arr处理obj
}else{ // 否则,进行另一种数据处理
另一种数据处理obj
}
callback1(null, obj1); //返回obj1,在结果处理位置2
});
}, function (err1, results1) { // 结果处理位置2
callback(null, results1[0]); // 返回results1[0],在结果处理位置1
});
}
})
}, function(err, results){ // results是最后的结果数组,结果处理位置1
处理最后的数据
});
Node.js异步确实性能有优势,但是对于之前一直写同步逻辑的开发者不是太友好,还有一些异步的写法需要继续学习!