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为什么选择javascript为载体语言
Jan 13 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 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
example2.php
2006/10/09 PHP
PHP操作xml代码
2010/06/17 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
SVM基本概念及Python实现代码
2017/12/27 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
python tkinter canvas使用实例
2019/11/04 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
创立科技Java面试题
2015/11/29 面试题
艺术专业大学生自我评价
2013/09/22 职场文书
销售自荐信
2013/10/22 职场文书
打架检讨书400字
2014/01/17 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
烟台的海导游词
2015/02/02 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
污水处理保证书
2015/05/09 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
反邪教教育心得体会
2016/01/15 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python