Node.js的那些坑——如何让异步并发方法同步顺序执行(for循环+异步操作)
2024-10-15 20:40:51
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 参考
4 扩展知识
1. Node.js的那些坑(三)——如何在异步方法都执行后再执行
2. Node.js的那些坑(四)——如何让异步并发方法同步顺序执行
最新文章
- 完整mybatis应用
- C# 如何获取当前应用程序的上一级路径
- Spring知识点总结大全(1)
- C++中的复制构造函数
- Mosquitto-Ubuntu 14.04快速安装问题解决
- Cookie 总结
- iOS - Swift Closure		闭包
- 【解题报告】[动态规划] RQNOJ - PID38 / 串的记数
- (转)《深入理解java虚拟机》学习笔记2——Java内存溢出实例
- Swift的属性,方法,下标脚本以及继承
- ser2net使用
- Python之线程&;进程
- 取得 iframe 容器的 URL
- attr设置checked,disabled等属性失效的问题,jquery的attr和prop的区别
- awk\sed\grep 补充
- [转,讲的非常精彩]CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
- 美客分销商城-接力购源码系统,全开源代码可进行二次开发,微信小程序分销商城
- Docker上运行MySQL服务
- BZOJ.2639.矩形计算(二维莫队)
- Mybatis 系列4-结合源码解析节点:typeAliases
热门文章
- 068、Calico的网络结构是什么?(2019-04-11 周四)
- luogu 3045 优先队列反悔/bzoj 2590
- 【全文转载】Precision Helper:最佳免费 CHM 制作软件
- Docker 空间大小设置 - 十
- npm 切换源 nrm
- 剑指Offer题解索引
- jQuery动态改变input框的属性
- 【如何使用jQuery】【jQuery弹出框】【jQuery对div进行操作】【jQuery对class,id,type的操作】【jquery选择器】
- Javascript - ExtJs - TabPanel组件
- oracle12.2.1 坑