Nodejs中怎么实现函数的串行执行


Posted in NodeJs onMarch 02, 2019

nodejs实现函数串行执行

众所周知,nodejs是用非阻塞异步io机制,也就是说函数执行完成的先后顺序和代码的编写的先后顺序可能不同,实际的顺序取决于一个函数自身执行的快慢。这就出现一个在nodejs中怎么编写串行执行也就是顺序执行代码的问题。试想,要是你写了2个函数,一个查询数据库,另一个返回查询的结果,要是不用串行执行那么还没等数据库查询完毕就返回了结果,这显然是不行的。因而串行执行在nodejs中很有用。那么怎么实现呢?

大家可能会说,将返回查询结果的函数写在查询数据库函数的回调函数里面就好了呀,但是有过开发经验的朋友一定知道,要是情况比较复杂时就会产生一个回调地狱的问题,即层层嵌套,最后都不知道自己写了些什么,可读性和维护性很差。

我们不防换个思路,要是将这些想要顺序执行的函数放到一个数组里面,当一个函数执行完毕时在执行数组里面的下一个函数不就行了嘛。其实,nodejs开源社区中的很多串行模块的基本思想就是这个。接下来我们一步一步完成这个串行的demo:

1.首先我们定义一个保存函数执行顺序的数值:

var tasks = [];

2.再定义一个往数值里面加入串行化执行函数的函数:

function addTask(task){
     tasks.push(task);
}

3.执行数组中下一个函数的函数:

function next(){
     if(tasks.length > 0){
        tasks.shift()();
     }else{
       return;   
     }
}

ok,大功告成,接下来定义几个测试函数:

var task1 = function(){
     console.log('task1 is finished');
     next();
}
var task2 = function(){
     console.log('task2 is finished');
     next();}var task3 = function(){
     console.log('task3 is finished');
     next();
}

开始测试:

addTask(task1);
addTask(task2);
addTask(task3);
next()

Nodejs中怎么实现函数的串行执行

换个顺序:

addTask(task1);
addTask(task3);
addTask(task2);
next();

Nodejs中怎么实现函数的串行执行

ok,大功告成。基于这个思想,在实际开发中大家可以定义一个模块,将这个串行打包,再也不用害怕回调地狱问题啦。

还可以用第三方库,如async.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

NodeJs 相关文章推荐
NodeJS框架Express的模板视图机制分析
Jul 19 NodeJs
nodejs npm install全局安装和本地安装的区别
Jun 05 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
nodejs基础应用
Feb 03 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
Nodejs让异步变成同步的方法
Mar 02 #NodeJs
nodejs使用async模块同步执行的方法
Mar 02 #NodeJs
NodeJS实现同步的方法
Mar 02 #NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 #NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 #NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 #NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 #NodeJs
You might like
php preg_replace替换实例讲解
2013/11/04 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
Python深入学习之闭包
2014/08/31 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
python解析xml文件实例分析
2015/05/27 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
2014年食品安全工作总结
2014/12/04 职场文书
红色电影观后感
2015/06/18 职场文书
关于环保的宣传稿
2015/07/23 职场文书
《检阅》教学反思
2016/02/22 职场文书
八年级作文之感恩
2019/11/22 职场文书