nodejs异步编程基础之回调函数用法分析


Posted in NodeJs onDecember 26, 2018

本文实例讲述了nodejs异步编程基础之回调函数用法。分享给大家供大家参考,具体如下:

Node.js 异步编程的直接体现就是回调。

异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。

回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。

例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

阻塞代码实例

1、创建一个文件 input.txt ,内容如下:

i have a dream

2、创建 main.js 文件, 代码如下:

var fs = require("fs");
var data = fs.readFileSync('input.txt'); //注:同步版的 fs.readFile()
console.log(data.toString());
console.log("程序执行结束!");

以上代码执行结果如下:

nodejs异步编程基础之回调函数用法分析

非阻塞代码实例

1、创建一个文件 input.txt ,内容如下:

i have a dream

2、创建 main.js 文件, 代码如下:

var fs = require("fs");
fs.readFile('input.txt', function (err, data) { //注:异步版的 fs.readFile()
  if (err) return console.error(err);
  console.log(data.toString());
});
console.log("程序执行结束!");

以上代码执行结果如下:

nodejs异步编程基础之回调函数用法分析

总结:

以上两个实例我们了解了阻塞与非阻塞调用的不同。

第一个实例在文件读取完后才执行完程序。

第二个实例我们呢不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。

因此,阻塞按是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
nodejs基础知识
Feb 03 NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
纯异步nodejs文件夹(目录)复制功能
Sep 03 NodeJs
Nodejs处理异常操作示例
Dec 25 #NodeJs
Nodejs模块的调用操作实例分析
Dec 25 #NodeJs
nodejs中方法和模块用法示例
Dec 24 #NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 #NodeJs
nodejs图片处理工具gm用法小结
Dec 12 #NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 #NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 #NodeJs
You might like
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
Javascript倒计时代码
2010/08/12 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
js倒计时小程序
2013/11/05 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
常用python编程模板汇总
2016/02/12 Python
Python中几种导入模块的方式总结
2017/04/27 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
护士演讲稿范文
2014/01/05 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
介绍信的写法
2015/01/31 职场文书
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers