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的那些坑(四)——如何让异步并发方法同步顺序执行

最新文章

  1. 完整mybatis应用
  2. C# 如何获取当前应用程序的上一级路径
  3. Spring知识点总结大全(1)
  4. C++中的复制构造函数
  5. Mosquitto-Ubuntu 14.04快速安装问题解决
  6. Cookie 总结
  7. iOS - Swift Closure 闭包
  8. 【解题报告】[动态规划] RQNOJ - PID38 / 串的记数
  9. (转)《深入理解java虚拟机》学习笔记2——Java内存溢出实例
  10. Swift的属性,方法,下标脚本以及继承
  11. ser2net使用
  12. Python之线程&进程
  13. 取得 iframe 容器的 URL
  14. attr设置checked,disabled等属性失效的问题,jquery的attr和prop的区别
  15. awk\sed\grep 补充
  16. [转,讲的非常精彩]CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
  17. 美客分销商城-接力购源码系统,全开源代码可进行二次开发,微信小程序分销商城
  18. Docker上运行MySQL服务
  19. BZOJ.2639.矩形计算(二维莫队)
  20. Mybatis 系列4-结合源码解析节点:typeAliases

热门文章

  1. 068、Calico的网络结构是什么?(2019-04-11 周四)
  2. luogu 3045 优先队列反悔/bzoj 2590
  3. 【全文转载】Precision Helper:最佳免费 CHM 制作软件
  4. Docker 空间大小设置 - 十
  5. npm 切换源 nrm
  6. 剑指Offer题解索引
  7. jQuery动态改变input框的属性
  8. 【如何使用jQuery】【jQuery弹出框】【jQuery对div进行操作】【jQuery对class,id,type的操作】【jquery选择器】
  9. Javascript - ExtJs - TabPanel组件
  10. oracle12.2.1 坑