iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Node.js中的异步编程的示例分析
  • 600
分享到

Node.js中的异步编程的示例分析

2024-04-02 19:04:59 600人浏览 八月长安
摘要

node.js中的异步编程的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。异步编程概述曾经的单线程模型在

node.js中的异步编程的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

异步编程概述

曾经的单线程模型在同步I/O的影响下,由于I/O调用缓慢,在应用层面导致CPU与I/O无法重叠进行。为了照顾编程人员的阅读思维习惯,同步I/O盛行了很多年。

Node.js中的异步编程的示例分析

但是有很大的性能问题!

node利用javascript及其内部异步库,将异步直接提升到业务层面。Node带来的最大特性莫过于基于事件驱动的非阻塞I/O模型。非阻塞I/O可以使CPU与I/O并不相互依赖等待,让资源得到更好的利用。

Node.js中的异步编程的示例分析

异步编程解决方案

目的:读取package.JSON 中main 字段对应的文件内容

Callback

使用回调函数进行异步I/O的操作

const fs = require("fs");

fs.readFile("./package.json", { encoding: "utf-8" }, (err, data) => {  if (err) throw err;  const { main } = JSON.parse(data);
  fs.readFile(main, { encoding: "utf-8" }, (err, data) => {    if (err) throw err;    console.log(data);
  });
});复制代码

Node.js中的异步编程的示例分析

问题:如何解决回调地狱?

Promise

Promise是一个具有四个状态的有限状态机,其中三个核心状态为Pending(挂起),Fulfilled( 完成)、Rejected(拒绝),以及还有一个未开始状态

详细内容可以看我之前的博文 Promise初探

Node.js中的异步编程的示例分析

使用Promise,实现读取 package.json 中 main 字段对应的文件内容

const { readFile } = require("fs/promises");

readFile("./package.json", { encoding: "utf-8" })
  .then((res) => {    return JSON.parse(res);
  })
  .then((data) => {    return readFile(data.main, { encoding: "utf-8" });
  })
  .then((res) => {    console.log(res);
  });复制代码

对比之前用Callback的解决方案,可以看出没有嵌套的回调了,通过一系列的链式调用来处理异步操作。

Node.js中的异步编程的示例分析

Callback 转为 Promise

如何将 Callback 转为 Promise 形式?

可以使用Node自带的工具函数 util.promisify

可以自己实现一下:

function promisify(fn, receiver) {  return (...args) => {    return new Promise((resolve, reject) => {
      fn.apply(receiver, [
        ...args,        (err, res) => {          return err ? reject(err) : resolve(res);
        },
      ]);
    });
  };
}const readFilePromise = promisify(fs.readFile, fs);复制代码

await

await 函数使用 try catch 捕获异常(注意并行处理)

const { readFile } = require("fs/promises");const start = async () => {  const { main } = JSON.parse(    await readFile("./package.json", { encoding: "utf-8" })
  );  const data = await readFile(main, { encoding: "utf-8" });  console.log(data);
};
start();复制代码

await的语法写起来就像同步编程一样,这里的操作是串行操作,会一行一行的等待执行。

Node.js中的异步编程的示例分析

如果几个任务是可以并行的,这样写就不太好了。这是,我们可以使用Promise.all来操作并行的任务

这里也会有个小问题,我课后问老师了,这是老师的解答

Node.js中的异步编程的示例分析

【问】在异步那块,说到串行和并行,在并行处理那块我有一个疑问。如果并行的场景要求:不管其他任务执行成功还是失败,每个异步任务都要执行完,最后统一处理错误,那在用Promise.all来处理多个异步任务时候,遇到第一个任务执行错误的时候就会返回,如何操作才能让所有任务都执行完成,再统一处理错误呢

【答】Promise.all 处理多个请求,当所有请求都成功的时候,resolve 一个数组回来,里面是执行结果。如果有一个请求失败就立刻 reject 那个错误来,所以这个地方我们不能使用 Promise.all 来实现。Promise 有一个 allSettled 方法,developer.mozilla.org/en-US/docs/…

Event

发布订阅模式,Node.js 内置events 模块

比如Http server on('request') 事件监听

const EventEmitter = require("events");class MyEmitter extends EventEmitter {}const myEmitter = new MyEmitter();

myEmitter.on("event", () => {  console.log("an event occurred!");
});
myEmitter.emit("event");const http = require("http");const server = http.createServer((req, res) => {
  res.end("hello!!! this is YK!!!");
});
server.on("request", (req, res) => {  console.log(req.url);
});

server.listen(3000);复制代码

Node.js中的异步编程的示例分析

Node.js中的异步编程的示例分析


看完上述内容,你们掌握Node.js中的异步编程的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网node.js频道,感谢各位的阅读!

--结束END--

本文标题: Node.js中的异步编程的示例分析

本文链接: https://www.lsjlt.com/news/80606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js中的异步编程的示例分析
    Node.js中的异步编程的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。异步编程概述曾经的单线程模型在...
    99+
    2024-04-02
  • JavaScript中异步编程的示例分析
    这篇文章给大家分享的是有关JavaScript中异步编程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。目的提升开发效率,编写易维护的代码引子问题请求时候为什么页面卡死??$.ajax({ &n...
    99+
    2023-06-15
  • c#中异步编程的示例分析
    这篇文章给大家分享的是有关c#中异步编程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么算异步?  广义来讲,两个工作流能同时进行就算异步,例如,CPU与外设之间的工作流就是异步的。在面向服务的系...
    99+
    2023-06-14
  • Promise中异步编程的示例分析
    这篇文章主要介绍Promise中异步编程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实例如下所示://1.解决异步回调问题 //1.1 如何同步异步请求 //如...
    99+
    2024-04-02
  • js异步编程的示例分析
    这篇文章主要为大家展示了“js异步编程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js异步编程的示例分析”这篇文章吧。异步回调是js的一大特性,理解...
    99+
    2024-04-02
  • C#异步编程的示例分析
    小编给大家分享一下C#异步编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!异步编程在处理并发方面被使用的越来越多,之所以说上面一句话,是为了区分多线程...
    99+
    2023-06-17
  • python中asyncio异步编程的示例分析
    这篇文章将为大家详细讲解有关python中asyncio异步编程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.   想学asyncio,得先了解协程携程的意义:计算型的操...
    99+
    2023-06-14
  • Node.js异步编程实例代码分析
    这篇文章主要介绍了Node.js异步编程实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node.js异步编程实例代码分析文章都会有所收获,下面我们一起来看看吧。异步编程案例一function&nbs...
    99+
    2023-07-04
  • JavaScript中异步的示例分析
    这篇文章将为大家详细讲解有关JavaScript中异步的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、异步解决方案的进化史JavaScript的异步操作一直是...
    99+
    2024-04-02
  • C#中异步多线程的示例分析
    这篇文章主要介绍C#中异步多线程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!进程、线程1. 进程首先了解,什么是线程 即一个应用程序运行时,占用资源的综合是一个进程。Windows 任务管理器里面可以看到...
    99+
    2023-06-25
  • C#异步多线程中Thread的示例分析
    这篇文章给大家分享的是有关C#异步多线程中Thread的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Thread API这里对 Thread 的一些常用 API 进行介绍,使用一些案例进行说明。由于 T...
    99+
    2023-06-25
  • JS中异步和单线程的示例分析
    这篇文章主要介绍了JS中异步和单线程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单线程但是我们在开发中,遇到请求网络,或者定时任务的时候,如果等待网络请求结束或者...
    99+
    2023-06-15
  • Ajax中同步和异步的示例分析
    小编给大家分享一下Ajax中同步和异步的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过ajax向后台发送和接收数据时...
    99+
    2024-04-02
  • Node.js中的示例分析
    小编给大家分享一下Node.js中的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Node.js 的非阻塞 I/OI/O 即 Input/Output,一...
    99+
    2023-06-15
  • Nodejs中异步I/O的示例分析
    小编给大家分享一下Nodejs中异步I/O的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!“异步”这个名词其实在Node之前就已经诞生了。但是在绝大多数高...
    99+
    2023-06-14
  • Springboot中异步任务的示例分析
    小编给大家分享一下Springboot中异步任务的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!异步任务启动类@MapperScan("com....
    99+
    2023-06-17
  • React中setState同步和异步的示例分析
    这篇文章主要介绍React中setState同步和异步的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! React起源于Facebook的内部项目。React的出现是革命性的创新,React的是一个...
    99+
    2023-06-15
  • node.js中http.createServer的示例分析
    小编给大家分享一下node.js中http.createServer的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!是n...
    99+
    2024-04-02
  • Node.js中Streams的示例分析
    这篇文章主要介绍了Node.js中Streams的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是流(steams)流(stre...
    99+
    2024-04-02
  • Node.js中进程和线程的示例分析
    这篇文章给大家分享的是有关Node.js中进程和线程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。进程与线程是一个程序员的必知概念,面试经常被问及,但是一些文章内容只是讲讲理论知识,可能一些小伙伴并没有...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作