iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Node.js中如何使用异步Generator函数
  • 486
分享到

Node.js中如何使用异步Generator函数

2024-04-02 19:04:59 486人浏览 独家记忆
摘要

本篇文章给大家分享的是有关node.js中如何使用异步Generator函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Http 框架分类首

本篇文章给大家分享的是有关node.js中如何使用异步Generator函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Http 框架分类

首先,想一下 Express 或 Hapi 之类的 HTTP 服务器框架。一般来说,大多数 HTTP 服务器框架都属于以下三种之一:

  1.  显式响应。 在 Express 中发送一个 HTTP 响应,你必须调用 res.end(),res.JSON() 或者 res 对象上的一些其他方法。换句话说,你必须显式调用一个方法来发送一个响应。

  2.  使用 return 隐式响应。 另一方面,Hapi 在 v17 中明确地删除了 reply() 函数,也就是说 Hapi 没有等同于 res 的方式。如果需要发送一个响应。你只需在请求的处理方法中 return 一个返回值。之后 Hapi 就会将 return 的值封装进一个 HTTP 响应中。

  3.  在适当的位置修改响应。  Koa 使用了一种混合了以上两种实现的独特处理方式。你将以修改 ctx 对象的方式,替代调用 res 对象的方法来构建响应。

换句话说,一些 HTTP 框架要求你显式调用方法来发送 HTTP 响应,另一些框架会提供给你一个可更改的 HTTP 响应对象,还有一些框架仅需要处理函数中 return 一个值。

websockets 和 HTTP 的区别在于,WEBSockets 服务器可以在任何时间向 socket 推送消息,不管是不是基于某条消息的响应。也就是说,初级的 websocket 框架,例如 ws, 看起来很像 “显式响应” 模式:你需要显式调用一个方法用于发送一条消息。

然而,是否可以在保持允许消息多发这个优点的同时,使 websockets 可以实现隐式响应?这就是异步 generator 产生的原因。

从服务器上读取大块数据

假设你有一个一次读取一堆文档的 MonGoose 指针,并且你希望用 websocket 在每一个文档读出时尽快将它发送出去。这种方式有助于在任何时刻都使服务器的内存使用量保持在最小:客户端可以获取所有的数据,而服务器却不用为此在内存中一次保存所有的数据。举个例子,这是使用 async/await 方式读取一个指针的实现:

const User = mongoose.model('User', mongoose.Schema({ name: String }));  const cursor = Model.find().cursor();  for await (const doc of cursor) {    console.log(doc.name); // Print user names 1 by 1.  }

使 generator 函数变得有趣的地方在于,在一个函数中 yield 方法可以被调用多次,并且在上次停止的地方继续运行,除了这点以外,yield 方法和 return 方法类似。

const User = mongoose.model('User', mongoose.Schema({ name: String }));  async function* streamUsers() {    const cursor = Model.find().cursor();    for await (const doc of cursor) {      // Yielding each doc behaves like multiple implicit responses, if you have      // a framework that supports it.      yield doc;    }  }

以下是如何使用 node.js 编写一个 Websocket 服务器:

const WebSocket = require('ws');  const server = new WebSocket.Server({    port: 8080  });  server.on('connection', function(socket) {    socket.on('message', function(msg) {      // Handle message   });  });

至此,接下来要做的是为 websocket 服务器添加 streamUsers() 方法。假设收到的每条消息都是有效的 JSON,并且都有属性 action 和 id。当 action === 'streamUsers'时,streamUsers() 就会被执行,并且基于 socket 向外发送每个被 Mongoose cursor 查询出来的用户。

const WebSocket = require('ws');  const server = new WebSocket.Server({    port: 8080  });  server.on('connection', function(socket) {   socket.on('message', function(msg) {      msg = JSON.parse(msg);      if (msg.action === 'streamUsers') {        void async function() {          // Send 1 message per user, as opposed to loading all users and then          // sending them all in 1 message.          for await (const doc of streamUsers()) {            socket.send(JSON.stringify({ id: msg.id, doc }));          }        }().catch(err => socket.send(JSON.stringify({ id: msg.id, error: err.message })));      }    });  });

以下是如何通过 websocket 客户端调用 streamUsers() 方法:

const client = new WebSocket('ws://localhost:8080');  // Will print each user doc 1 at a time.  client.on('message', msg => console.log(msg));  await new Promise(resolve => client.once('open', resolve));  client.send(JSON.stringify({ action: 'streamUsers', id: 1 }));

以上就是Node.js中如何使用异步Generator函数,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网JavaScript频道。

--结束END--

本文标题: Node.js中如何使用异步Generator函数

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

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

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

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

下载Word文档
猜你喜欢
  • Node.js中如何使用异步Generator函数
    本篇文章给大家分享的是有关Node.js中如何使用异步Generator函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。HTTP 框架分类首...
    99+
    2022-10-19
  • ES6 中Generator 函数如何使用
    ES6 中Generator 函数如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Generator ...
    99+
    2022-10-19
  • JavaScript中怎么使用generator函数同步执行ajax任务
    JavaScript中怎么使用generator函数同步执行ajax任务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体内容如下functi...
    99+
    2022-10-19
  • Python混合如何使用同步和异步函数
    这篇文章主要介绍“Python混合如何使用同步和异步函数”,在日常操作中,相信很多人在Python混合如何使用同步和异步函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python混合如何使用同步和异步函数...
    99+
    2023-07-06
  • Node.js 中异步迭代器如何使用
    这篇文章将为大家详细讲解有关Node.js 中异步迭代器如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是异步迭代器异步迭代器实际上是以前迭代器的...
    99+
    2022-10-19
  • Node.js 中如何使用异步迭代器
    这期内容当中小编将会给大家带来有关Node.js 中如何使用异步迭代器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在 Events 中使用 asyncIteratorN...
    99+
    2022-10-19
  • JavaScript异步函数怎么使用
    这篇文章主要介绍了JavaScript异步函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript异步函数怎么使用文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • java异步函数怎么使用
    这篇文章主要介绍了java异步函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java异步函数怎么使用文章都会有所收获,下面我们一起来看看吧。1 低层级 asyncio 索引低层级 API 索引&am...
    99+
    2023-07-05
  • Node.js中如何使用async函数
    本文小编为大家详细介绍“Node.js中如何使用async函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中如何使用async函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是 async...
    99+
    2023-07-05
  • node.js中如何使用async异步控制工具
    node.js中如何使用async异步控制工具,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。这两个操作中,第一个异步的程序我们可能会写成这...
    99+
    2022-10-19
  • Typescrip异步函数Promise使用方式
    目录Typescrip异步函数Promisetypescript- typescrip与react对象的类型数组类型函数类型类型断言内置对象泛型React 中使用Typescrip异...
    99+
    2022-11-13
  • JavaScript中Generator函数和yield表达式怎么使用
    这篇“JavaScript中Generator函数和yield表达式怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“J...
    99+
    2023-07-04
  • 如何在 Node.js 中使用 Go 函数?
    近年来,Go 语言在后端开发领域中越来越受到开发者的青睐。与此同时,Node.js 也是一个非常流行的 JavaScript 运行时环境,被广泛应用于开发服务器端应用程序。那么,如何在 Node.js 中使用 Go 函数呢?本文将详细介绍...
    99+
    2023-08-22
    npm 函数 javascript
  • Node.js 中如何使用回调函数
    今天就跟大家聊聊有关Node.js 中如何使用回调函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Node.js 回调函数Node.js 异步编程...
    99+
    2022-10-19
  • js如何获取异步函数数据
    本篇内容介绍了“js如何获取异步函数数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!异步函数一般正常情况下,js中的函数是一个一个地按照顺...
    99+
    2023-07-05
  • generator如何在mybatis中使用
    这期内容当中小编将会给大家带来有关 generator如何在mybatis中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。引言:最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体、dao...
    99+
    2023-05-31
    mybatis generator
  • js异步函数async/awit怎么使用
    异步函数(async/await) 是一种用于处理 JavaScript 异步操作的语法糖,它建立在 Promise 基础之上,使得...
    99+
    2023-09-29
    js
  • 如何异步请求处理函数
    本篇文章为大家展示了如何异步请求处理函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。sendmail.php代码如下:<php$name = $_POST[...
    99+
    2022-10-19
  • Python混合怎么使用同步和异步函数
    在协程函数中调用同步函数在协程函数中直接调用同步函数会阻塞事件循环,从而影响整个程序的性能。我们先来看一个例子:以下是使用异步 Web 框架 FastAPI 写的一个例子,FastAPI 是比较快,但不正确的操作将会变得很慢。import ...
    99+
    2023-05-14
    Python
  • 如何使用Node.js中的回调函数
    本篇内容主要讲解“如何使用Node.js中的回调函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Node.js中的回调函数”吧!趣讲Node.js的回...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作