当前位置: 首页 > news >正文

【第2章 Node.js基础】2.2 Node.js回调函数

学习目标

(1)理解Node.js的回调函数;
(2)掌握回调函数的使用。

什么是回调函数

回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在特定的事件或条件发生时被调用。回调函数通常用于异步操作,例如网络请求或文件读取,以确保在操作完成后执行特定的逻辑。

正常回调

function main(info, callback){//我是主函数,参数列表中的callback是一个回调函数console.log('还在回家的路上');console.log('到家了,发条信息吧');callback (info);//调用回调函数
}
function sendMsg(msg){  //我是回调函数console.log(msg);
}
main('亲爱的,我到家了!',sendMsg);//执行主函数

在给定的示例中,sendMsg函数被作为回调函数传递给main函数。当main函数执行到callback(info)时,会调用传递进来的回调函数,并将info作为参数传递给它。在这个例子中,main函数在打印一些信息后调用了回调函数sendMsg,并将消息作为参数传递给它。

异步操作回调

//
const fs = require("fs");//引入fs(filesystem)模块
//异步读取文件内容
fs.readFile('demo.txt', function (err, data) {if (err) return console.error(err); //读取失败则报错console.log(data.toString());//读取成功则输出文件内容
});
console.log("Node程序已经执行结束!");

在这里插入图片描述

回调函数的作用是在异步操作完成后执行特定的逻辑,以便处理操作的结果或执行进一步的操作。通过将回调函数作为参数传递给其他函数,我们可以实现更灵活和可扩展的代码结构。

总结回调函数

回调函数在异步编程中起着重要的作用,它有以下优点和缺点:

优点:

  1. 异步控制:回调函数允许在异步操作完成后执行特定的逻辑,确保代码按照正确的顺序执行。
  2. 灵活性:通过回调函数,可以将不同的逻辑组合在一起,实现更复杂的异步操作。
  3. 可重用性:回调函数可以被多个函数调用,提高代码的可重用性。

缺点:

  1. 回调地狱:当多个异步操作嵌套调用时,会导致代码变得复杂和难以维护,形成所谓的“回调地狱”。
  2. 错误处理困难:在回调函数中处理错误可能会变得困难,因为错误可能在多个回调函数之间传递,难以追踪和处理。
  3. 代码可读性差:由于回调函数的嵌套和异步操作的特性,代码的可读性可能会降低,使得代码难以理解和调试。

为了解决回调函数的缺点,出现了一些替代方案,如Promise、async/await等。这些方案提供了更简洁、可读性更高的代码结构,使异步编程更加容易和可维护。

相关文章:

  • MySQL中表格的自我复制,与复制表格
  • acwing算法基础之搜索与图论--树与图的遍历
  • [第二章—Spring MVC的高级技术] 2.2 置multipart解析器
  • 21 移动网络的前世今生
  • Sa-Token拦截全部接口必须登录-然后自定义注解来匿名登录-作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下:
  • 虚拟机复制后,无法ping通问题解决
  • Flutter——最详细(AppBar)使用教程
  • 【Linux精讲系列】——vim详解
  • 【Linux】:git基本操作_添加文件_两种场景_查看.git文件 || git修改文件 || 版本回退
  • arima模型python代码
  • 网际报文协议ICMP及ICMP重定向实例详解
  • 数据结构—字符串
  • APISpace IP归属地查询接口案例代码
  • 【网络协议】聊聊HTTPDNS如何工作的
  • Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集
  • [LeetCode] Wiggle Sort
  • 【5+】跨webview多页面 触发事件(二)
  • 2017年终总结、随想
  • Java深入 - 深入理解Java集合
  • Linux gpio口使用方法
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python 反序列化安全问题(二)
  • Python进阶细节
  • python学习笔记-类对象的信息
  • 百度地图API标注+时间轴组件
  • 产品三维模型在线预览
  • 程序员最讨厌的9句话,你可有补充?
  • 搭建gitbook 和 访问权限认证
  • 二维平面内的碰撞检测【一】
  • 诡异!React stopPropagation失灵
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 排序(1):冒泡排序
  • 使用agvtool更改app version/build
  • 双管齐下,VMware的容器新战略
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • Hibernate主键生成策略及选择
  • Python 之网络式编程
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (04)odoo视图操作
  • (笔试题)分解质因式
  • (二)学习JVM —— 垃圾回收机制
  • (翻译)terry crowley: 写给程序员
  • (十五)使用Nexus创建Maven私服
  • (译)2019年前端性能优化清单 — 下篇
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .net 4.0发布后不能正常显示图片问题
  • .NET Project Open Day(2011.11.13)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET企业级应用架构设计系列之技术选型
  • .stream().map与.stream().flatMap的使用
  • [ IO.File ] FileSystemWatcher
  • [Bada开发]初步入口函数介绍
  • [C#]winform部署PaddleOCRV3推理模型