Node.js使用Async解决两重异步

问题描述

使用Node.js操作MongoDB数据库时,遇到这样一个问题:

  1. 循环遍历一个数组Arr
  2. 在每个元素的基础上查询表A
  3. 在表A的查询结果的基础上,查询表B
  4. 整合表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异步确实性能有优势,但是对于之前一直写同步逻辑的开发者不是太友好,还有一些异步的写法需要继续学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值