NodeJs使用async让代码按顺序串行执行
描述
由于nodejs中的函数调用都是异步执行的,而笔者在工程开发中函数A需要四五个参数,而这四五个参数值都是通过函数调用获得,因此按顺序写代码时,执行到函数A时,往往函数A需要的参数值因为参数的异步调用关系,所需参数都还是undefined。
解决思路是保证函数A执行之前,函数A所需的四五个参数值都已经获得,可以通过async来实现代码的串行执行。
版本
nodejs: 6.9.5
async: 2.2.0
步骤
1、首先安装async
npm install async --save
2、写async串行化代码
笔者函数A所需的参数a,b,c,d,e都是通过函数调用获得,但是这五个函数调用都是独立的,之间不会相互影响,因此可以选择async中的 parrallel来实现,具体代码如下:
let async = require('async');
async.parallel({
paraA:function(done){
let paraA = invokeA();//参数paraA通过invokeA获得
done(null,paraA);
},
paraB:function(done){
let paraB = invokeB();
done(null,paraB);
},
paraC:function(done){
let paraC = invokeC();
done(null,paraC);
},
paraD:function(done){
let paraD = invokeD();
done(null,paraD);
},
paraE:function(done){
let paraE = invokeE();
done(null,paraE);
}
},function(error, result){
func(result.paraA,result.paraB,result.paraC,result.paraD,result.paraE);//函数func需要参数paraA,paraB......
})
使用async时,result汇总了串行阶段的所有返回值,并可以在串行代码执行完毕后使用。
注意:如果所需串行的代码相互之间形成前后依赖关系,那么可以使用async中的series,具体使用方法为将上例中的parallel改为series。
更多async使用参考:async使用
NodeJs使用async让代码按顺序串行执行的更多相关文章
- 【Nodejs】nimble或async并不能保证程序串行执行,回调是回避不了的坑
先看一段例程: //------------------------------- // 用于创建目录 //------------------------------- function creat ...
- vue使用技巧:Promise + async + await 解决组件间串行编程问题
业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...
- 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)
[源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...
- SpringBoot中定时任务默认是串行执行 如何设置并行
SpringBoot项目中,定时任务默认是串行执行的,不论启动多少任务,都是一个执行完成,再执行下一个. 如何设置并行呢? @EnableAsync 和@Async 这两个注解来实现 ,具体如下: ...
- spring定时器任务多任务串行执行问题排查
最近发现个生产问题,定时器任务某些任务没有及时执行.经过研究排查发现spring 定时器任务scheduled-tasks默认配置是单线程串行执行的,这就造成了若某个任务执行时间过长,其他任务一直在排 ...
- oracle中并行执行不一定比串行执行快
并行执行与串行执行相比,能否缩短执行时间,取决于如下几个方面:1.待执行的目标SQL是否适合并行执行,有些SQL是不太适合并行执行的,比如走索引的嵌套循环连接.2.数据库服务器上的硬件资源(如CPU. ...
- jenkins 多任务串行执行
摘要 今天在新创建自动化部署项目的时候遇到了一个问题:我们的项目是maven聚合的所以在构建maven项目的时候要从parent开始build,但是这样会造成一个问题,我每次添加此parent项目下的 ...
- loadrunner多场景的串行执行以及定时执行
方法一: 既然是脚本串行执行,那在场景设计中必然是要用多个脚本,要注意的是需要将Scenario Schedule中的Schedule by设置为Group的模式.然后按实际需要依次设置每个脚本的Sc ...
- 任意promise串行执行算法 - 童彪
// 任意promise串行执行算法 - 童彪 function runAllPromise() { var p1 = new Promise((resove, reject) => { s ...
随机推荐
- 环境变量、cp、mv、cat 等命令
1.环境变量: PATH 个人理解 环境变量,即是所有命令文件所存放的目录,或是人为的定义的目录,(命令文件所存放的目录,当输入一个命令的时候,系统会自动找到且不报错,并不需要输入绝对路径,来运行相关 ...
- 【javaScript】数组的相关操作
数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...
- POJ1417 True Liars
题意 Language:Default True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6392 Accep ...
- doubleclick-video-skipable
from:https://support.google.com/adxbuyer/answer/2691733?hl=en Implement skippable functionality usin ...
- 图像识别的前期工作——使用pillow进行图像处理
pillow是个很好用的python图像处理库,可以到官方网站下载最新的文件.如果官网的任何PIL版本都不能与自己的python版本对应,或安装成功后发现运行出错,可以尝试从一个非官方的whl网站下载 ...
- javascript, jquery, nodejs学习2
debug tools http://stackoverflow.com/questions/1911015/how-to-debug-node-js-applications node inspec ...
- ES6 中 Class 与 TypeScript 中 Class 的区别(待补充)
ES6 中 Class 与 TypeScript 中 Class 的区别(待补充)
- TypeScript 知识点
TypeScript 通过 类型批注 提供静态类型以在编译时启动类型检查. 基本批注类型是number.bool.string.而弱或动态类型是any. typescript 使用 作用 语句 全局安 ...
- linux shell获取键盘输入
linux shell从键盘获取输入 代码1: #!/bin/bash #提示“Input your choice:”,把用户的输入保存入变量choice_user中read -p "Inp ...
- Linux下vim基本操作和清空文件内容的常用方法
以前都是用的很土的办法,大概有以下几种.1.直接删除,创建一个新的同名文件(这种方法的弊端是有可能这个文件带着权限或者是属性,那么你新建这个文件后有可能会导致权限不正确或者丢失属性).2.使用vim编 ...