115同步盘v1.0.9.3 正式版

类型:下载工具大小:1.6M语言:中文 评分:1.8

标签:

立即下载

众所周知,异步是nodejs中得天独厚的特点和优势,但同时在程序中同步的需求(比如控制程序的执行顺序为:func1 -> func2 ->func3 )也是很常见的。本文就是对这个问题记录自己的一些想法。

需要执行的函数:

var func1 = function(req,res,callback){

setTimeout(function(){

console.log('in func1');

callback(req,res,1);

},13000);

}

var func2 = function(req,res,callback){

setTimeout(function(){

console.log('in func2');

callback(req,res,2);

},5000);

}

var func3 = function(req,res,callback){

setTimeout(function(){

console.log('in func3');

callback(req,res,3);

},1000);

}

可以看出在func1,func2和func3中都是用了setTimeout函数,执行的时间分别为13秒,5秒和1秒。由于nodejs异步的特性,如果使用普通的函数调用方法:

var req = null;

var res = null;

var callback = function(){};

func1(req,res,callback);

func2(req,res,callback);

func3(req,res,callback);

输出内容:

in func3

in func2

in func1

原因是因为nodejs是异步的,func2不会等func1执行完毕后再执行,而是立即执行(func3也是如此)。由于func3的运行时间最短而率先结束,func2次之,func1最后。但这明显不是我们想要的结果。怎么办?

解决办法一:callback

//深层嵌套

var req = null;

var res = null;

func1(req,res,function(){

func2(req,res,function(){

func3(req,res,function(){

process.exit(0);

})

});

});

这种方法虽然能快速的解决,但暴露的问题也很明显,一是代码维护不方面,二是代码的深层嵌套看起来很不舒服。这种方法并不可取。

解决方法二:递归调用

function executeFunc(funcs,count,sum,req,res){

if(count == sum){

return ;

}

else{

funcs[count](req,req,function(){

count++;

executeFunc(funcs,count,sum,req,res);

});

}

}

//同步调用

var req = null;

var res = null;

var funcs = [func1,func2,func3];

var len = funcs.length;

executeFunc(funcs,0,len,req,res);

先将多个函数组成一个数组。再可以利用递归函数的特性,使程序按照一定的顺序执行。

解决方法三:调用类库

随着nodejs的发展,响应的类库也越来越多。Step和async 就是其中不错的。

1. Step的调用相对比较清爽:

Step(

function thefunc1(){

func1(this);

},

function thefunc2(finishFlag){

console.log(finishFlag);

func2(this);

},

function thefunc3(finishFlag){

console.log(finishFlag);

}

);

2.async 的 series方法,就本例而言,它的调用方法:

var req = null;

var res = null;

var callback = function(){};

async.series(

[

function(callback){

func1(req,res,callback);

},

function(callback){

func2(req,res,callback);

},

function(callback){

func3(req,res,callback);

}

]

);

node mysql同步_一些nodejs实现同步操作想法实现相关推荐

  1. node mysql框架_关于nodejs的框架选择

    对于新入门的小伙伴来说,选择一个合适的nodejs框架可能是一件很头疼的事情,我最初也为这个头疼过,下面分享一下我的框架选择之路 nodejs的框架 最近来node的火热,带动了一大批的框架,例如 e ...

  2. node mysql崩溃_为什么这个mysql错误会导致nodejs崩溃而不是去catch函数?

    事实上,@Quentine很接近正确的事情... 最后,我创建了自己的包装函数,用适当的promise处理来创建connection+call execute. import mysql = requ ...

  3. es用canals怎么和mysql同步_搬运基础服务到kubernetes,遇这3类大坑怎么破?

    工作中需要将原本部署在物理机或虚拟机上的一些基础服务搬到kubernetes中,在搬的过程中遇到了不少坑,笔者在此特别分享一下所遇到的问题及相应的解决方法~ 一.异常网络引起的问题 之前使用redis ...

  4. nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例

    本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 依赖模块: 1. mysqlnpm install mysq ...

  5. 本地mysql和阿里云mysql同步_阿里云RDS和本地mysql做主从同步

    一.从RDS备份要同步的数据库到本地服务器 建议将表结构和数据分开备份. [root@localhost ~]# mysqldump -hrm-wz9a985njgong7yh5.mysql.rds. ...

  6. access mysql 同步_使ACCESS数据库保持同步

    同步(Synchronization)是数据库在网络环境中应用所要涉及到的一个重要概念.其基本过程大致分以下几个步骤:首先把一个数据库设为可复制副本属性,使其成为设计正本(VB中称设计原版,ACCES ...

  7. node mysql和koa_2019年NodeJS框架Koa和Express选型比较

    Koa和Express都是NodeJS的主流应用开发框架. Express是一个完整的nodejs应用框架.Koa是由Express团队开发的,但是它有不同的关注点.Koa致力于核心中间件功能.nod ...

  8. derby mysql 同步_[Derby]数据库操作说明

    1. 创建新数据库 connect 'jdbc:derby:mydb;create=true'; ij> connect 'jdbc:derby:mydb;create=true'; ij> ...

  9. derby mysql 同步_三分钟学会使用Derby数据库

    Derby数据库是一个纯用Java实现的内存数据库,属于Apache的一个开源项目.由于是用Java实现的,所以可以在任何平台上运行:另外一个特点是体积小,免安装,java1.6开始集成了derby数 ...

最新文章

  1. java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.init(Unknown Source)
  2. 2020-05-16 为什么PID中的P或者说状态反馈中的K不能无限增大
  3. Nginx安装手冊以及图片server部署
  4. 如何在pe里加载阵列卡驱动_PE中RAID卡驱动的添加办法
  5. Koo叔说Shader-- 熟悉渲染管线
  6. jcp jsr_JCP选举结果:LJC和CloudBees赢得EC席位
  7. SQL注入时order by 后面加数字的作用
  8. 对外汉语偏误语料库_对外汉语偏误汇总
  9. 蓝牙配对-扫描-连接-状态查询
  10. Feburary——1052.爱生气的书店老板
  11. 盘点业务流程的SAP操作调整
  12. maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable
  13. 仿速度装机联盟程序源码,装机联盟程序源码 安装联盟程序源码
  14. Java 版本任你发,我用Java8.(Java 15 新功能介绍 )
  15. 【转载】讲真,认知几乎是人和人之间唯一的本质差别。
  16. 京津冀计算机学科大学排名,2021京津冀地区民办大学排名前十
  17. opencv录制视频进行保存
  18. No.051<软考>《(高项)备考大全》【冲刺5】《软考之 119个工具 (3)》
  19. java服务端集成极光消息推送
  20. java的equle怎么用,法语虚拟式现在时(Le Subjonctif Présent)用法总结(一)

热门文章

  1. C#winform【实现上一张、下一张挑选图片】--实战练习七
  2. 库卡工业机器人负载曲线图_KUKA/库卡工业机器人 KR10 R1100 机械手臂 负载10KG 六轴...
  3. 【徐禾 政治经济学概论】 读书笔记 §1.3劳动的二因素:具体劳动和抽象劳动(上.价值质的规定性)
  4. 如何解决抽样调查过程中所面临的难点和问题?——以政治学研究为例
  5. ATS子系统主机服务器功能,ATC、ATP、ATO系统详细介绍
  6. MySQL系列3—标准SQL语言
  7. Altium designer22 原理图绘制 altiumdesigner
  8. linux版drastic模拟器设置,NDS模拟器如何设置?怎样配置nds模拟器NO$GBA?
  9. Ubuntu卸载软件
  10. 批量提取文件名(JPG照片等)