Node.js的那些坑——如何让异步并发方法同步顺序执行(for循环+异步操作)

1 前言

nodejs的回调,有时候真的是让人又爱又恨的,当需要用for循环把数据依次存入数据库,但是如果使用正常的for循环,永远都是最后一次值的记录,根本不符合要求。

解决此方案有几种,例如闭包(这里利用js函数编程的特性,建立一个闭包来保存每次需要的i值),详情参见参考1和Asyn函数,然后函数的forEach方法也是居于它实现的。

注:async主要实现了很多有用的函数,例如:

  • each: 如果想对同一个集合中的所有元素都执行同一个异步操作。
  • map: 对集合中的每一个元素,执行某个异步操作,得到结果。所有的结果将汇总到最终的callback里。与each的区别是,each只关心操作不管最后的值,而map关心的最后产生的值。
  • series: 串行执行,一个函数数组中的每个函数,每一个函数执行完成之后才能执行下一个函数。
  • parallel: 并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序。
  • 其它

2 代码

//userIdArr是用户列表
userIdArr.forEach(function(userId){
            //var userId = userIdArr[i];
            db.get_users_stat(userId, function (data) {
                if (data == null) {
                    //说明是新用户
                    var argsMap = {"userId": userId};
                    db.insert_users_stat(userId, argsMap, function (data2) {
                        if (data2 == null) {
                            callback(null);
                            return;
                        }
                        var index = getIndex(userData,userId);
                        updateUserStat(userData[index]);

                    });

                } else {
                    var index2 = getIndexs(userData,userId);
                    updateUserStat(userData[index2]);
                }

            });
        });  

3 参考

1. node.js在遇到“循环+异步”时的注意事项

4 扩展知识

1. Node.js的那些坑(三)——如何在异步方法都执行后再执行

2. Node.js的那些坑(四)——如何让异步并发方法同步顺序执行

转载于:https://www.cnblogs.com/fanbi/p/9453609.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值