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实用示例 缩址还原
Dec 28 NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
NodeJS制作爬虫全过程
Dec 22 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 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
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python中的元类编程入门指引
2015/04/15 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python实现句子翻译功能
2017/11/14 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
医院义诊活动总结
2014/07/04 职场文书
学习与创新自我评价
2015/03/09 职场文书
终止合同协议书范本
2016/03/22 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
深入浅析Django MTV模式
2021/09/04 Python