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分页类代码分享
Jun 17 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
使用nodejs中httpProxy代理时候出现404异常的解决方法
Aug 15 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php抓取页面与代码解析 推荐
2010/07/23 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
javascript for循环性能测试示例
2019/08/07 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
自主招生自荐信范文
2013/12/04 职场文书
银行职业规划书范文
2013/12/28 职场文书
医院护士的求职信
2014/01/03 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书