深入理解NodeJs异步编程的含义

首先理解什么是异步编程

含义:

有异步肯定会有同步

凡是回调函数存在的,都是异步代码

先执行同步代码,看到异步代码后,将异步代码放到异步代码执行区(先不执行)

继续执行同步代码,当所有的同步代码执行结束后,在执行异步代码

异步代码案例:

console.log('1');setTimeout(()=>{console.log('2秒后再执行...');},2000);console.log('end');

程序执行完毕后的输出结果:
1
恩德
2秒后再执行…

总结:代码会在执行中会依次执行,但执行到回调函数,就会把回调函数放入异步代码执行区,先不执行,如果代码执行完后,再去依次执行放入异步代码执行区。

同步代码行案例:

for(let i=0;i<10;i++){console.log(i);}console.log('end');

程序执行完毕后的输出结果:
0123456789
end
总结:同步代码,for循环无论执行多久,下面代码都要等待它执行完毕后才会执行。

豆包AI编程 豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483 查看详情 豆包AI编程

2.为什么有异步编程

nodejs 特点是单线程、异步、非阻塞,如果代码逻辑涉及到多个回调,就会出现非常可怕的代码,不利于后期的维护。

而异步编程的作用就是提高效率,现在对程序越来越大,CPU和内存对压力也越来越大,异步可以让电脑同时处理多个事务,所以需要异步编程。

3.如何处理异步编程出现的问题

在我们项目当中,会出现一些问题,比如,拿不到值,是undefined,是因为异步编程。
解决方案:回调函数嵌套、 Promise、 await、async语法糖 变成同步

现在文件夹里有1,2,3三个txt文件,我们需要读取这三个文件,如果直接读取第一遍可能顺序对第二遍就会出现顺序混乱的情况,所以我们需要处理异步的问题,让他按顺序执行

使用回调函数嵌套代码:

const fs=require('fs')const path =require('path')let p1=path.join('1.txt')let p2=path.join('2.txt')let p3=path.join('3.txt')fs.readFile(p1,'utf8',(err,data)=>{    if(err) throw err    console.log(data)    fs.readFile(p2,'utf8',(err,data)=>{        if(err) throw err        console.log(data)        fs.readFile(p3,'utf8',(err,data)=>{            if(err) throw err            console.log(data)        })    })})

使用Promise代码:

// new promise 的作用:让异步代码马上执行const fs=require('fs')function readFile(path){    return new Promise((resolve,reject)=>{        fs.readFile(path,'utf8',(err,data)=>{            resolve(data)        })    })}let p1=readFile('1.txt')let p2=readFile('2.txt')let p3=readFile('3.txt')p1.then(result=>{    console.log(result)    return p2}).then(result=>{    console.log(result)    return p3}).then(result=>{    console.log(result)    return p3})

还可以使用 await、async语法糖 代码:

const path=require('path')const fs=require('fs')let p1=readFile('1.txt')let p2=readFile('2.txt')let p3=readFile('3.txt')var readfile=(path)=>{    return new Promise((resolve,reject)=>{        fs.readFile(path,'utf8',(err,data)=>{            resolve(data)        })    })}async function exec() {    await readfile(p1).then(result => console.log(result))    await readfile(p2).then(result => console.log(result))    await readfile(p3).then(result => console.log(result))}exec()

【推荐:node.js视频教程】

以上就是深入理解NodeJs异步编程的含义的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/546850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
华硕f81se声卡驱动下载安装详情
上一篇 2025年11月9日 18:07:54
智能家居发展史上八大技术创新
下一篇 2025年11月9日 18:08:00

相关推荐

  • VSCode的扩展推荐是怎么工作的?

    VSCode的扩展推荐基于用户行为和项目环境智能生成,当你打开.py文件时会推荐Python相关工具,打开.ts、.vue等文件则触发对应语言插件;系统通过分析package.json、requirements.txt等依赖文件识别技术栈,推荐Docker、ESLint等匹配扩展;同时记录常用操作如…

    2026年9月20日
    000
  • VSCode的侧边栏图标代表什么?

    资源管理器(文件夹图标)用于管理项目文件结构,支持新建、重命名、删除和拖拽操作;2. 搜索(放大镜图标)实现全局文本查找与替换,支持正则表达式及范围筛选;3. 源代码管理(分支图标)集成Git功能,可查看变更、提交代码并同步远程仓库;4. 运行和调试(虫子图标)支持断点调试、变量监控及多语言启动配置…

    2026年9月20日
    000
  • 如何为VSCode添加自定义主题?

    可通过安装扩展、手动添加JSON文件或使用Yeoman生成器创建主题。首先安装现成主题扩展并从颜色主题列表中选择应用;其次将自定义主题JSON文件放入用户themes目录后在命令面板中启用;最后可用yo code生成项目开发发布主题,需编辑配色文件并预览效果。 为 VSCode 添加自定义主题有几种…

    2026年9月20日
    000
  • edge浏览器无法打开本地HTML文件或显示空白怎么办_Edge浏览器打开本地HTML文件失败解决方法

    1、检查文件路径并选择Edge打开,确保路径为纯英文;2、在edge://flags中启用“Allow file access from files”;3、使用开发者工具排查资源加载错误;4、通过命令行启动Edge绕过安全限制;5、推荐使用npx live-server搭建本地服务器运行HTML文件…

    2026年9月20日
    000
  • VSCode的扩展推荐是基于什么?

    答案是VSCode根据文件类型、项目配置、用户行为和社区流行度智能推荐扩展。打开.py文件时提示Python扩展,存在package.json则推荐JS工具,频繁格式化代码会推荐Prettier,安装ESLint后可能推荐Prettier,高评分和官方扩展优先展示。 VSCode的扩展推荐主要基于你…

    2026年9月20日
    000
  • mysql如何实现用户注册功能

    答案:通过MySQL创建用户表并结合后端逻辑实现注册功能。首先在MySQL中创建包含用户名、密码、邮箱等字段的users表,确保唯一性约束;后端接收%ignore_a_1%提交的注册数据,对密码加密(如SHA256或bcrypt),使用参数化查询将数据安全存入数据库;前端通过表单或AJAX发送注册请…

    2026年9月13日
    200
  • 如何利用VSCode的配置文件(Launch.json)环境变量来管理不同环境的配置?

    通过配置launch.json中的多个调试环境并结合.env文件,可高效管理开发、测试、生产等不同环境的运行参数。 在使用 VSCode 进行开发时,launch.json 文件是调试配置的核心。通过合理利用环境变量和配置文件分离,可以轻松管理不同环境(如开发、测试、生产)的运行参数。 理解 lau…

    2026年9月13日
    000
  • 如何用ChatGPT来重构优化一段旧代码_提升代码质量与性能的步骤

    明确目标并提供上下文,分步引导ChatGPT优化代码结构、算法和语言特性,最后验证建议并本地测试,确保重构有效且安全。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 用ChatGPT来重构和优化旧代码是一种高效提升代码质量与性能的方式。关键…

    2026年9月12日
    100
  • 如何让VSCode自动识别项目类型?

    VSCode通过项目中的文件和配置自动识别类型,需提供线索如package.json、requirements.txt等标志性文件,结合安装对应语言扩展、配置.vscode/settings.json及使用.code-workspace文件,即可让编辑器正确识别并支持Node.js、Python、R…

    2026年9月12日
    300
  • 如何配置VSCode以附加(Attach)模式调试一个正在运行的Node.js或Python进程?

    要使用VSCode附加模式调试Node.js或Python进程,需先以可调试方式启动程序。对于Node.js,通过–inspect系列参数开启调试端口(如9229),并在launch.json中配置”request”: “attach”及对…

    2026年9月12日
    100
  • 如何找到并安装适合你编程语言的扩展?

    首先确认编程语言及项目需求,再根据编辑器选择合适扩展。以VS Code为例,通过扩展面板搜索语言名称,优先选择官方推荐、高下载量和评分的扩展,如Microsoft提供的Python扩展。安装后检查语法高亮与智能提示,并在设置中配置解释器路径、格式化工具等选项。若使用框架或特定运行时,可额外安装对应增…

    2026年9月12日
    200
  • 如何通过扩展让VSCode支持一门新的编程语言?

    要让VSCode支持新编程语言需通过扩展实现。1. 使用yo code生成扩展模板,包含package.json、语法高亮和语言配置文件。2. 在.tmLanguage.json中用正则定义语法高亮规则,注册到package.json。3. 通过language-configuration.json…

    2026年9月12日
    100
  • 除了内置的终端,VSCode有哪些插件能极大提升命令行的工作效率?

    Code Runner可一键运行多语言代码并显示结果,适合快速测试;2. Terminal Tabs通过标签页管理多个终端会话,支持重命名和快捷切换;3. Shell Command允许对文件或选中文本执行自定义shell命令,提升重复操作效率;4. Task Explorer可视化运行项目脚本,自…

    2026年9月12日
    100
  • 全栈应用中X-Frame-Options防护策略的正确实施

    本教程探讨了在全栈应用中配置`x-frame-options` http响应头以防止点击劫持(clickjacking)的常见误区。我们发现,在spring security等后端框架中配置此头部仅对后端api端点有效,而前端应用(如由nginx、tomcat等服务器托管的单页应用)仍可能面临风险。…

    2026年9月12日
    000
  • 打开DeepSeek官网 deepseek在线版立即使用

    DeepSeek官网在线版可通过https://www.deepseek.com访问,用户点击“开始对话”即可使用智能对话、代码生成、长文本处理等功能,开发者还可申请API密钥集成至自有系统,支持多语言调用与安全配置。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepS…

    2026年9月12日
    100
  • 如何在mysql中开发任务分配管理系统

    答案:基于MySQL设计任务分配系统需构建用户表和任务表,通过assignee_id关联实现任务分配;利用SQL完成任务的增删改查操作;结合角色字段控制权限,管理员可管理所有任务,普通成员仅限个人任务;支持项目分类、评论、日志等扩展功能,并在关键字段创建索引以提升查询性能。 在 MySQL 中开发任…

    2026年9月12日
    100
  • 如何使用mysql开发项目管理任务表

    首先设计包含任务基本信息的主表tasks,包含id、title、status、priority等字段,并通过project_id和assignee_id关联项目与用户;为支持多对多关系创建user_tasks中间表;常用操作包括按项目或负责人查询任务、筛选高优先级任务、更新状态及查找即将到期任务;结…

    2026年9月12日
    100
  • 如何在VSCode中运行和调试Node.js应用?

    答案:在VSCode中调试Node.js需先确认Node环境正常,通过集成终端运行脚本,并创建launch.json配置调试参数,设置断点后启动调试,可查看变量、执行语句或附加到运行进程。 在VSCode中运行和调试Node.js应用非常方便,借助内置的调试功能和集成终端,可以快速启动、设置断点并排…

    2026年9月11日
    100
  • 怎样为开源项目贡献代码?从克隆、调试到提交VSCode扩展的完整流程是怎样的?

    首先克隆仓库并配置环境,安装依赖后在VSCode中调试扩展;接着修改代码并编写测试用例确保质量;最后提交更改至分支并发起PR,描述改动内容与验证方式,等待维护者审查并迭代反馈。 为开源项目贡献代码是提升技术能力、参与社区协作的重要方式。以 VSCode 扩展为例,从克隆仓库到提交代码的完整流程其实并…

    2026年9月11日
    200
  • 如何在mysql中开发简单社交平台项目

    答案是设计合理的数据库结构并实现基础功能。首先创建用户、动态、评论、点赞和关注关系表,定义主外键关联;接着通过SQL完成发帖、评论、点赞、关注等操作;再结合Python等后端语言连接MySQL执行参数化查询防止注入;最后为常用字段添加索引、使用UTF8MB4字符集并定期备份数据以优化性能与安全。 要…

    2026年9月11日
    100

发表回复

登录后才能评论
关注微信