描述


由于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让代码按顺序串行执行的更多相关文章

  1. 【Nodejs】nimble或async并不能保证程序串行执行,回调是回避不了的坑

    先看一段例程: //------------------------------- // 用于创建目录 //------------------------------- function creat ...

  2. vue使用技巧:Promise + async + await 解决组件间串行编程问题

    业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...

  3. 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

    [源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...

  4. SpringBoot中定时任务默认是串行执行 如何设置并行

    SpringBoot项目中,定时任务默认是串行执行的,不论启动多少任务,都是一个执行完成,再执行下一个. 如何设置并行呢? @EnableAsync  和@Async 这两个注解来实现 ,具体如下: ...

  5. spring定时器任务多任务串行执行问题排查

    最近发现个生产问题,定时器任务某些任务没有及时执行.经过研究排查发现spring 定时器任务scheduled-tasks默认配置是单线程串行执行的,这就造成了若某个任务执行时间过长,其他任务一直在排 ...

  6. oracle中并行执行不一定比串行执行快

    并行执行与串行执行相比,能否缩短执行时间,取决于如下几个方面:1.待执行的目标SQL是否适合并行执行,有些SQL是不太适合并行执行的,比如走索引的嵌套循环连接.2.数据库服务器上的硬件资源(如CPU. ...

  7. jenkins 多任务串行执行

    摘要 今天在新创建自动化部署项目的时候遇到了一个问题:我们的项目是maven聚合的所以在构建maven项目的时候要从parent开始build,但是这样会造成一个问题,我每次添加此parent项目下的 ...

  8. loadrunner多场景的串行执行以及定时执行

    方法一: 既然是脚本串行执行,那在场景设计中必然是要用多个脚本,要注意的是需要将Scenario Schedule中的Schedule by设置为Group的模式.然后按实际需要依次设置每个脚本的Sc ...

  9. 任意promise串行执行算法 - 童彪

      // 任意promise串行执行算法 - 童彪 function runAllPromise() { var p1 = new Promise((resove, reject) => { s ...

随机推荐

  1. windows 10 下sublime text 3配置c/c++编译环境

    来源于在网上各种帖子,自己成功配置之后写作笔记: 检查环境变量 首先配置重定义环境变量,过程如下: 创建一个test.c文件 内容: #include <stdio.h> int main ...

  2. (10)MySQL触发器(同时操作两张表)

    什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...

  3. Go Example--变量

    package main import "fmt" //通过import导入fmt标准包 func main() { //定义变量,并初始化 var a string = &quo ...

  4. 【liunx】时间处理函数

    一.脚本示例 [mylinuxaccount@linux01 ~]$ date +%Y%m%d 20171224 [mylinuxaccount@linux01 ~]$ date +%F 2017-1 ...

  5. 针对IE9的CSS兼容

    (自己亲自试过有用)针对IE9的CSS只需在相应CSS代码加入只有IE9识别的 \9\0.具体代码如下: .div{ background-color:#0f0\9\0;/* ie9 */ } 其他浏 ...

  6. mysqldump-1045

    mysqldump: [Warning] Using a password on the command line interface can be insecure.mysqldump: Got e ...

  7. pipenv 方便的python 开发工作流工具

    pipenv 将 composer.bundler.npm.yarn.cargo 等比较方便的包管理工具添加到了python 语言中,可以 帮助我们自动的管理virtualenv ,同时可以方便的从p ...

  8. 使用cmake编译luabind

    编写了一下cmakelists.txt文件 根目录 cmake_minimum_required(VERSION 2.8)project (Test) add_definitions( "/ ...

  9. Weekend Log 4.6

    PHP相关 常用PHP编译 .\/configure 12 ./configure -prefix=/usr/local/php --with-config-file-path=/usr/local/ ...

  10. MHA 报错:There is no alive slave. We can't do failover

    dba http://blog.csdn.net/zengxuewen2045/article/details/51524880 关于这个错误:   1 2 3 4 Mon Feb 13 10:29: ...