HoRain云--Node.js 回调函数
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境它使得 JavaScript 可以脱离浏览器运行在服务器端。Node.js 的核心特性之一是其非阻塞 I/O输入/输出模型这使得 Node.js 非常适合处理高并发的网络应用。Node.js 异步编程的直接体现就是回调。在 Node.js 中回调函数是一种异步编程模式用于处理 I/O 操作如文件读写、数据库交互、网络请求等这些操作通常需要花费较长时间如果采用同步方式会阻塞整个程序的执行直到操作完成。使用回调函数Node.js 可以在 I/O 操作进行时继续执行其他代码一旦 I/O 操作完成再执行回调函数。Node.js 是单线程的但通过事件驱动和回调机制实现异步操作。使用场景读取文件、写入文件等 I/O 操作。处理网络请求。数据库查询。例如我们可以一边读取文件一边执行其他命令在文件读取完成后我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能可以处理大量的并发请求。回调函数一般作为函数的最后一个参数出现function foo1(name, age, callback) { } function foo2(value, callback1, callback2) { }实例阻塞代码实例创建一个文件 input.txt 内容如下菜鸟教程官网地址www.runoob.com创建 main.js 文件, 代码如下实例var fs require(fs);var data fs.readFileSync(input.txt);console.log(data.toString());console.log(程序执行结束!);以上代码执行结果如下$ node main.js 菜鸟教程官网地址www.runoob.com 程序执行结束!非阻塞代码实例创建一个文件 input.txt 内容如下菜鸟教程官网地址www.runoob.com创建 main.js 文件, 代码如下实例var fs require(fs);fs.readFile(input.txt, function (err, data) {if (err) return console.error(err);console.log(data.toString());});console.log(程序执行结束!);参数解释err是错误对象如果读取失败会有值。data是读取的文件内容。以上代码执行结果如下$ node main.js 程序执行结束! 菜鸟教程官网地址www.runoob.com以上两个实例我们了解了阻塞与非阻塞调用的不同第一个实例在文件读取完后才执行程序。第二个实例我们不需要等待文件读取完这样就可以在读取文件时同时执行接下来的代码大大提高了程序的性能。因此阻塞是按顺序执行的而非阻塞是不需要按顺序的所以如果需要处理回调函数的参数我们就需要写在回调函数内。回调地狱Callback Hell当多个异步操作需要按顺序执行时回调函数会导致代码嵌套使得代码难以阅读和维护。实例fs.readFile(file1.txt, utf8, (err, data1) {if (err) {console.error(Error reading file1:, err);return;}fs.readFile(file2.txt, utf8, (err, data2) {if (err) {console.error(Error reading file2:, err);return;}fs.readFile(file3.txt, utf8, (err, data3) {if (err) {console.error(Error reading file3:, err);return;}console.log(Data from all files:, data1, data2, data3);});});});为了改善代码的可读性和可维护性可以使用以下几种方法PromisesPromises 是一种新的异步编程模式它允许你以链式的方式处理异步操作避免了回调地狱。async/await基于 Promisesasync/await提供了一种更接近同步代码风格的异步编程方式使得异步代码更易于理解和维护。事件驱动编程Node.js 也支持事件驱动编程通过监听和触发事件来处理异步操作。1、使用 async/awaitasync/await 是 ES2017 引入的语法糖可以让你更方便地处理异步操作避免回调地狱。实例const fs require(fs).promises;async function readFiles() {try {const data1 await fs.readFile(file1.txt, utf8);const data2 await fs.readFile(file2.txt, utf8);const data3 await fs.readFile(file3.txt, utf8);console.log(Data from all files:, data1, data2, data3);} catch (err) {console.error(Error reading files:, err);}}readFiles();2、使用 PromisesPromises 是另一种处理异步操作的方式可以链式调用 then 方法避免嵌套回调。实例const fs require(fs).promises;fs.readFile(file1.txt, utf8).then(data1 {console.log(Data from file1:, data1);return fs.readFile(file2.txt, utf8);}).then(data2 {console.log(Data from file2:, data2);return fs.readFile(file3.txt, utf8);}).then(data3 {console.log(Data from file3:, data3);}).catch(err {console.error(Error reading files:, err);});回调函数是 Node.js 中处理异步操作的一种基本方式但随着应用复杂性的增加回调地狱问题会变得越来越明显。通过使用 async/await 或 Promises可以显著改善代码的可读性和可维护性。

相关新闻

2027 届商科海归秋招,求职辅导怎么选不踩坑

2027 届商科海归秋招,求职辅导怎么选不踩坑

2027 届商科海归秋招已经逐步启动,商科赛道竞争持续白热化,大量留学生面临海内外求职信息差、本土实习履历不足、金融 / 咨询 / 科技大厂招聘规则不熟悉等难题,不少同学在挑选求职辅导时踩坑,遭遇收费模糊、服务缩水、承诺无法兑现…

2026/8/25 2:27:25 阅读更多 →
太原闪腰岔气如何选择诊疗机构?2024年实用参考指南

太原闪腰岔气如何选择诊疗机构?2024年实用参考指南

太原闪腰岔气患者可优先选择具备中医骨伤诊疗资质的正规机构就诊,山西省商业供销职工医院中医科主任朱卫兵深耕该类病症诊疗三十余年,可提供纯中医保守调理方案。 闪腰岔气属于哪类诊疗范畴? 闪腰岔气属于急性腰部软组织损伤范畴,…

2026/8/25 2:27:25 阅读更多 →
视频内容蒸馏技术:从原理到实践的全流程部署与测试指南

视频内容蒸馏技术:从原理到实践的全流程部署与测试指南

这次我们来看一个名为“蒸馏任何视频的Skill”的项目。从标题来看,它很可能是一个专注于视频处理或视频内容提取的AI工具或方法,核心在于“蒸馏”这个概念,意指从视频中高效、精准地提炼出关键信息或技能。对于需要处理大量视频素材、希望自动…

2026/8/25 2:27:25 阅读更多 →

最新新闻

阿里云PAI一键部署GLM-5.2大模型:代码生成与工程化实践指南

阿里云PAI一键部署GLM-5.2大模型:代码生成与工程化实践指南

1. 项目概述:当国产大模型遇上云原生平台最近在AI圈子里,一个消息引起了不小的讨论:阿里云的机器学习平台PAI,正式支持了一键部署GLM-5.2模型。这个组合之所以引人注目,是因为GLM-5.2在代码生成与理解能力上&#xff0…

2026/8/26 12:16:42 阅读更多 →
信号转换的工程化解题思路:从定义到验证的全链路设计

信号转换的工程化解题思路:从定义到验证的全链路设计

1. 从“信号转换”说起:一个无处不在的工程母题 信号转换,这四个字听起来可能有点抽象,甚至带点教科书式的刻板印象。但如果你拆开来看,它几乎是我们这个数字世界赖以运转的基石。从你手机麦克风将声波变成电信号,到Wi…

2026/8/26 12:16:42 阅读更多 →
将PDF、视频、播客变成AI知识库:开源RAG项目实战指南

将PDF、视频、播客变成AI知识库:开源RAG项目实战指南

收藏了 300 本 PDF、网盘里存了几百个小时的课程视频、通勤路上听完的播客转头就忘——这几乎是每个技术人都在面对的知识吃灰问题。问题不在于买的内容不够多,而在于输入的知识和日常使用的工具之间没有建立起可检索、可调用、可沉淀的链路。最近 GitHub 上一类开源…

2026/8/26 12:16:42 阅读更多 →
FPGA实现后调试:ILA、ECO与增量编译实战指南

FPGA实现后调试:ILA、ECO与增量编译实战指南

1. 项目概述:为什么“实现后的设计调试”是FPGA工程师真正的分水岭 在Vivado里点下“Generate Bitstream”按钮,看着进度条走到100%,生成一个绿色的.bit文件——这常常被新手误认为项目的终点。但真正有经验的FPGA工程师心里都清楚&#xff1…

2026/8/26 12:16:42 阅读更多 →
ESKF实战指南:IMU+GNSS融合的数学模型与工程陷阱

ESKF实战指南:IMU+GNSS融合的数学模型与工程陷阱

1. 这不是“又一个卡尔曼滤波教程”,而是你真正用ESKF跑通IMUGNSS融合前必须啃下的硬骨头如果你正在调试一个无人机飞控、自动驾驶定位模块,或者高精度农业机械的导航系统,手头有一块带IMU和GNSS的板子,却卡在“姿态抖得像筛糠”“…

2026/8/26 12:16:42 阅读更多 →
AFCTF 2021 Web赛题深度复盘:CSP绕过、文件读取与逻辑漏洞实战解析

AFCTF 2021 Web赛题深度复盘:CSP绕过、文件读取与逻辑漏洞实战解析

1. 从解题到内功:一次AFCTF 2021 Web赛题的深度复盘那次打AFCTF 2021的经历,现在想起来还觉得挺有意思。当时赛程过半,卡在几道Web题上,那种明明感觉思路就在眼前,却总差临门一脚的滋味,相信很多CTFer都体会…

2026/8/26 12:15:41 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →