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打包工具整合到鼠标右键的方法
May 11 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
Nodejs中 npm常用命令详解
Jul 04 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
nodejs multer实现文件上传与下载
May 10 NodeJs
nodejs读取并去重excel文件
Apr 22 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.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
python语言使用技巧分享
2016/05/31 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
django教程如何自学
2020/07/31 Python
Python wordcloud库安装方法总结
2020/12/31 Python
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
php png失真的原因及解决办法
2021/10/24 PHP
正则表达式基础与常用验证表达式
2022/06/16 Javascript
nginx之queue的具体使用
2022/06/28 Servers