Node.js异步编程

【图书介绍】《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('第二关');
  1. 异步API

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

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

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

复制代码
D:\WorkSpace\node_mongodb_vue3_book\codes\chapter3>node 同步异步.js
第一关
第二关
第一关
第二关
最后一关
  1. 同步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中,在执行代码的时候,会将同步代码提取出来放置到同步代码执行区,将异步代码提取出来放置到异步代码执行区,然后按顺序优先执行同步代码执行区中的代码,待同步代码执行区中的代码执行完之后,再从异步代码区中把回调函数提取到回调函数队列中,最后根据先后顺序把回调函数有序放到同步代码执行区依序执行,如下图所示。

相关推荐
Lupino1 小时前
Node.js 与 Haskell 混合网络编程踩坑记:TCP 粘包与状态不一致引发的“死锁”
javascript·node.js
神秘的猪头2 小时前
LangChain Tool 实战:让大模型“长出双手”,通过 Tool 调用连接真实世界
langchain·node.js·aigc
小北方城市网3 小时前
第 10 课:Node.js 后端企业级进阶 —— 任务管理系统后端优化与功能增强(续)
大数据·前端·vue.js·ai·性能优化·node.js
Cshaosun5 小时前
阿里云宝塔面板部署vue+nodejs项目并实现https访问操作流程
vue.js·阿里云·https·node.js·宝塔·文件下载
Mr_Wu20185 小时前
Corepack 实现 pnpm 版本自动管理
node.js
天远数科5 小时前
Node.js 全栈攻略:基于天远数据 API 开发即时身份核验中间件
大数据·node.js·编辑器·vim
Rabi'16 小时前
编译ATK源码
前端·webpack·node.js
萌萌哒草头将军17 小时前
AudioDock:服务器和 NAS 音频播放最棒的软件!🚀🚀🚀
服务器·docker·node.js
未知原色18 小时前
web worker使用总结(包含多个worker)
前端·javascript·react.js·架构·node.js
weixin_531651811 天前
Node.js Path 模块
node.js