Node.js异步编程

news2024/9/23 13:28:30

【图书介绍】《Node.js+MongoDB+Vue.js全栈开发实战》-CSDN博客

《Node.js+MongoDB+Vue.js全栈开发实战(Web前端技术丛书)》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com)

本节主要介绍Node.js异步编程的相关内容。内容包括 同步API、异步API、同步API与异步API的区别。

1. 同步API

同步API是只有当前API执行完成后,才能继续执行下一个API,也就是说代码会从上至下一行一行地执行。示例如下:

//同步
console.log('第一关');
console.log('第二关');

2. 异步API

异步API是指当前API的执行不会阻塞后续代码的执行。示例如下:

console.log('第一关');
//异步
setTimeout(() => {
  console.log('最后一关');
}, 1000);
console.log('第二关');

执行上述同步API和异步API代码,结果如下:

D:\WorkSpace\node_mongodb_vue3_book\codes\chapter3>node 同步异步.js
第一关
第二关
第一关
第二关
最后一关

3. 同步API与异步API的区别

同步API与异步API的区别主要体现在以下两个方面:

(1)获取返回值不同:同步API可以从返回值中拿到API执行的结果,但是异步API不可以。

同步API方法调用,可以获取返回值:

//获取当前日期
function getCurFormatDate() {
  var date = new Date();
  var seperator1 = '-';
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var strDate = date.getDate();
  if (month >= 1 && month <= 9) {
    month = '0' + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = '0' + strDate;
  }
  var currentdate = year + seperator1 + month + seperator1 + strDate;
  return currentdate;
}
const dt = getCurFormatDate();
console.log(dt);//2023-10-06

异步API调用,无法获取返回值:

// 异步
function getMsg() {
  setTimeout(function () {
    return '每个人都是生活的导演';
  }, 1000);
}
const msg = getMsg();
console.log(msg);//undefined

(2)代码执行顺序不同:同步API从上到下依次执行,前面的代码会阻塞后面代码的执行;异步API不会等待前一个API执行完成后再向下执行。

同步API有序执行:

const names = ['衍悔', '龙千山', '凌日'];
for (let name of names) {
  console.log(name);
}
console.log('遍历结束');

运行结果:

衍悔
龙千山
凌日
遍历结束

异步API无序执行:

console.log('代码开始执行');
setTimeout(() => {
console.log('1秒后执行的代码');
}, 1000);
setTimeout(() => {
  console.log('0秒执行的代码');
}, 0);
console.log('代码结束执行');

运行结果:

代码开始执行
代码结束执行
0秒执行的代码
1秒后执行的代码

代码执行顺序分析:

在Node.js中,在执行代码的时候,会将同步代码提取出来放置到同步代码执行区,将异步代码提取出来放置到异步代码执行区,然后按顺序优先执行同步代码执行区中的代码,待同步代码执行区中的代码执行完之后,再从异步代码区中把回调函数提取到回调函数队列中,最后根据先后顺序把回调函数有序放到同步代码执行区依序执行,如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拿捏!远程观影之详细操作教程

碎碎念 相信不少小伙伴是有收藏影片的&#xff0c;时不时会取出来进行观看。大多时候&#xff0c;我们都是在局域网中观影&#xff0c;局域网中是直连&#xff0c;所以可以一直流畅进行观影&#xff0c;但是有不少朋友是有远程观影需求的&#xff0c;那么怎么实现能随时在手机…

squidpy学习总结

下载安装 首先不要使用pip install squidpy[interactive] 安装&#xff0c;因为我在base环境里python版本是python3.11.5, 导致安装narapi包的时候出现问题&#xff0c;所以我选择的办法是 conda create -n sp_env python3.9.12 注意这个有个问题&#xff0c;我的mac为啥建立不…

【git】git与​TortoiseGit​下载教程

下载地址&#xff1a;https://git-scm.com/ 下载TortoiseGit 官网链接&#xff1a;https://tortoisegit.org/ 拉去代码错误&#xff1a; 找到在本地安装的 git 服务的根目录 -> Git -> usr -> bin 目录下选中 ssh.exe &#xff0c;再点击打开即可&#xff0c;如下图&a…

在Ubuntu上基于NDK(r21)交叉编译FFmpeg for Android

各软件版本号&#xff1a;VMware为17 Pro、FFmpeg版本号为4.3.8、NDK版本号为r21e、Ubuntu版本号为20.04 1.下载FFmpeg4.3.8并解压 2.下载NDK&#xff08;r21e&#xff09;并解压 https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip 3.在ffmpeg-4.…

FastReport数据区横向排列展示

FastReport数据区横向排列展示 步骤1&#xff1a;设置数据区的Columns Editor属性 1、Count&#xff1a;2表示数据区里的控件将最多显示两列 2、AcrossThenDown&#xff1a;数据区里的控件将会被从做到右依次循环遍历 3、Width&#xff1a;9.25&#xff0c;因为我只设置了两列…

mmdebstrap:创建 Debian 系统 chroot 环境的利器 ️

文章目录 mmdebstrap 的一般性参数说明 &#x1f4dc;mmdebstrap 的常见用法示例 &#x1f308;使用 mmdebstrap 的注意事项 ⚠️ &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&am…

我的创新大赛经验分享:如何打磨优化项目

我的创新大赛经验分享&#xff1a;如何打磨优化项目 前言1. 强化创新性与独特性2. 深度市场调研与用户需求洞察3. 优化商业模式与财务规划4. 提升团队表现与协作效率5. 完善展示材料与演示技巧6. 模拟答辩与专家评审7. 关注细节与排除潜在问题结语 前言 在创新的浪潮中&#xf…

Vue前端服务加密后端服务解密--AES算法实现

在实际项目中考虑到用户数据的安全性&#xff0c;在用户登录时&#xff0c;前端需要对用户密码加密&#xff08;防止用户密码泄露&#xff09;&#xff0c;服务端收到登录请求时先对密码进行解密&#xff0c;然后再进行用户验证登操作。本文 AES ECB 模式来实现前端机密后端解密…

PLSQL导入导出ORACLE数据提示失败问题修改PLSQL配置

oracle中plsql导入提示无法导入问题 1.首先看下是否环境变量已经配置(具体配置看下面环境变量配置) 2.plsql数据导入中tools-->Preferences中配置如下框中的内容 3.设置 tnsnames.ora文件中看下是否设置有问题 4.PLSQL乱码问题 NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16…

C语言作业难题

计算 1 1/(2 * 3) 1/(3 * 4) ... 1/(n * (n 1)) ?直到最后一相值小于0.00001为至。 参考代码&#xff1a; #include <stdio.h> int main() { // 定义一个变量用来存储累加结果 double sum 1;// 将第一个运算数直接赋值给sum,后期程序无需在处理 double n 2; //…

如何快速对接Android平台GB28181接入模块(SmartGBD)

好多开发者希望我们不是从代码级&#xff0c;而是从流程方面&#xff0c;大概介绍下Android端GB28181设备接入段模块。本文以SmartGBD的Camera2Demo为例&#xff0c;大概聊下相关的集成流程。 大牛直播SDK推出的Android平台GB28181接入SDK&#xff08;SmartGBD&#xff09;&am…

git commit提示node不是内部或外部命令,也不是可运行的程序 或批处理文件。

使用git commit 提交项目时提示"node" 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 但是node早已安装了&#xff0c;node -v也能正常显示版本号&#xff0c;我检查了环境变量等配置&#xff0c;都是正常的 E:\work\2024\project12\DEMO>gi…

慧灵——引领智能机器人行业新潮流

随着人工智能和机器人技术的迅猛发展&#xff0c;智能机器人行业正迎来前所未有的增长潜力和创新机遇。慧灵科技作为行业内的佼佼者&#xff0c;以其创新技术和卓越性能&#xff0c;正在引领智能机器人行业的新潮流。 智能机器人行业是一个充满活力和潜力的领域。随着全球人口老…

花指令基础

花指令基础 偶尔更新。。。 默认会一点cpp和汇编。 文章目录 花指令基础1. 简介2. 常见类型1. jxjnx2. calladd [esp]ret 3. 等价解析1. push pop2. jmp call retn3. enter leave4. and MoeCTF 2022 chicken_soup参考 1. 简介 花指令可以误导反汇编&#xff0c;但不影响程序…

基于SpringBoot+Vue的物流管理系统(带1w+文档)

基于SpringBootVue的物流管理系统(带1w文档) 基于SpringBootVue的物流管理系统(带1w文档) 本课题研究和开发物流管理系统管理系统&#xff0c;让安装在计算机上的该系统变成管理人员的小帮手&#xff0c;提高物流管理系统信息处理速度&#xff0c;规范物流管理系统信息处理流程…

Vue - 关于v-wave 波浪动画组件

Vue - 关于v-wave 波浪动画组件 这个动画库可以在标签中添加新的v-wave属性&#xff0c;来让点击标签元素后添加漂亮的波纹效果&#xff0c;并且可以根据父元素自动形成波纹的颜色&#xff0c;也可以自定义波纹颜色&#xff0c;持续时间&#xff0c;透明度&#xff0c;触发的对…

JavaScript骚操作媒体查询攻略

背景 一讲到媒体查询&#xff0c;大家首先想到的可能都是都是CSS中media,这也没错&#xff0c;这确实是最常见的媒体查询方式&#xff0c;但是我们今天要讲的不是它&#xff0c;而是大家很少接触到的window.matchMedia()和window.resize 最近在做项目的时候拿到一个需求&…

MySQL笔记-基础篇(一):查询

博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 MySQL是一种广泛使用的关系型数据库管理系统&#xff0c;它基于结构化查询语言&#xff08;SQL&#xff09;来管理和操作数据。下面将依次探讨MySQL查询的各个方面&#xff0c;确保理解扎实&#xff0c;能够在实…

“阳光高考爬虫项目揭秘:增量爬虫与断点续抓的Python实战“

阳光高考项目 项目要求 爬取各大高校基本信息和招生简章&#xff08;招生简章要求存储为pdf格式并且入库&#xff09; 数据库表设计 idtask_urlstatus&#xff1a;0(未抓取)&#xff0c;1(抓取中)&#xff0c;2(抓取完毕)&#xff0c;3(错误)&#xff0c;4(更新中)&#xff…

C语言小练习(叁)

个人练习&#xff1a; 编程题&#xff1a; 1.编写一个函数&#xff0c;通过输入球的半径&#xff0c;返回球的体积&#xff1b; #include <stdio.h> #define pi 3.14 //计算球体积的函数 double v_ball(double r) {return 4.0 / 3.0 * pi * r * r * r; }int main() {d…