Node.js 利用Promise对象并发写入流、读取流(Stream)

2023-11-10

上篇文章我们用高阶函数(函数柯里化)实现并发文件读取流、写入流

今天,我们用另外一种方法实现:

let fs = require('fa')

// 写一个通用的读取函数,返回promise对象
function getFile(filename) {
	return new Promise(resolve => {
		// 创建读取函数
	   let readerStream = fs.createReadStream(fileName)  
	   // 设置编码
	   readerStream .setEncoding('UTF8')
	   // 读取数据流
	   readerStream .on("data",chunk=>resolve(chunk))
	})
}

利用Promise.all() 并发读取后写入

Promise.all([getFile('first.txt'),getFile('second.txt'),getFile('three.txt')])
	.then(res => {
		// 创建fs写入数据流(output.txt)
		let writerStream = fs.createWriteStream('output.txt')
		// 遍历读取的结果并且写入到output.txt
		res.forEach(item => writerStream.write(item, 'UTF8'))
		// 写入结果
		writerStream.end(() => {
			// 输出文件内容
			fs.readFile('output.txt', (err,data) => {
				console.log('并发写入成功')
				console.log(data.toString()) // 隐式类型转换
			})
		})
	})

结果
在这里插入图片描述
附文章:

Node.js 利用高阶函数 ( 柯里化 ) 并发写入流、读取流(Stream)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 利用Promise对象并发写入流、读取流(Stream) 的相关文章

  • Electron:我们可以使用其唯一的 id 来访问 BrowserWindow 吗?

    假设多次调用以下函数来创建 BrowserWindow 例如 5 次 let mainWindow function createWindow use strict mainWindow new BrowserWindow height h
  • 在ubuntu 12.04上安装nodejs和npm后找不到.npmrc文件

    我刚刚按照教程在我的 ubuntu 12 04 上安装了 nodejs 和 npm https gist github com dwayne 2983873 https gist github com dwayne 2983873 现在安装
  • API 使用令牌向 odoo 进行身份验证

    我想使用令牌从 Express 应用程序向 Odoo 进行身份验证 我在用odoo xmlrpc https www npmjs com package odoo xmlrpc连接 Odoo 的节点模块 我的快递应用程序 Odoo 要求 A
  • Nodejs 调试生产中的错误

    我有一个在生产环境中运行的 Nodejs 脚本 我不太可能 千分之一 遇到这样的错误 TypeError value is out of bounds at checkInt buffer js 1009 11 at Buffer writ
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 使用socket.io进行用户身份验证

    我已经红色了这个教程 http howtonode org socket io auth http howtonode org socket io auth 它展示了如何使用express和socket io对用户进行身份验证 但是有没有一
  • 使用cheerio 检索href

    我有一个下载的 html 文件 看起来像这样 div div div div style height 11px color white font size 9px font weight bold div div style border
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • 沙箱中的 Nodejs

    我使用 NodeJS 作为客户端浏览器和服务器之间的中间人来处理所有请求 我正在尝试使用 nodejs 作为过滤工具并突出显示 如果不是 所有恶意脚本 但我意识到nodejs让脚本以当前环境权限运行 因此 我决定通过安装沙箱在新的上下文中运
  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • 在 Node 中使用 Babel 导入与请求 [重复]

    这个问题在这里已经有答案了 我想在一个文件中导入一个类 use strict import models from model class Foo bar export default new Foo 当我使用导入时它有效 例如 impor
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • 如何解决 Socket.io 404(未找到)错误?

    我正在使用 Socket io 和 Express 在我的项目中 我有一个登录页面和一个主页 当我成功登录时 我导航到 localhost 3000 home 并收到以下错误 GET http localhost 3000 socket i
  • 节点无法抓取某些页面

    我不知道这是否与冷融合页面有关 但我无法刮掉这些 cfm pages 在目录中的命令行中request run node gt var request require request node gt var url http linguis
  • Cosmos DB Mongo API 如何管理“请求率很大”情况

    我有以下代码 async function bulkInsert db collectionName documents try const cosmosResults await db collection collectionName
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • 在node.js中加载并执行外部文件

    从另一个节点js文件运行一个节点js文件是否容易 可能 例如 我有两个文件 test1 js 和 test2 js 我想从 test2 js 执行 test1 js 文件 我认为完成你想做的事情的更好方法是按照我的其他答案建议的去做 但是要
  • 如何检查请求是否通过 Express 中的 https 发送

    我想强制某些路线始终在我的 Express 应用程序中使用安全连接 我如何检查以确保它使用 https 我在 heroku 上使用搭载 ssl 进行部署 我也在 Heroku 上部署 当他们使用 nginx 进行反向代理时 他们添加了一堆标
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • 如何使用 Passport 验证 Supertest 请求?

    我使用 Passport js 进行身份验证 本地策略 并使用 Mocha 和 Supertest 进行测试 如何使用 Supertest 创建会话并发出经过身份验证的请求 正如 zeMirco 指出的那样 底层superagent模块支持

随机推荐

  • Linux平台的IO操作

    什么是IO如何理解IO IO就是输入与输出 I Input 从键盘拷贝数据至内存中 O Output 从内存中拷贝数据到终端上 因为Linux平台基本思想为 一切皆文件 所以 对于IO可以再次理解位 I 从文件中拷贝数据到内存中去 O 从内
  • WebService 学习笔记之一 HelloWorld

    一 开发环境 我的开发环境是 MyEclipse 10 Apache cxf 2 3 0 相关jar包下载地址 http www apache org dist cxf 2 3 0 二 开发步骤 创建Server 1 新建一个Java工程C
  • Linux/Android 充电框架/流程分析 1

    1 内核注册供电设备 内核通过 devm power supply register 或者 power supply register 注册供电相关的设备 2 获取电量的方式 电量是电池相关的信息 所以 注册的供电设备为 battery 例
  • [深入研究4G/5G/6G专题-46]: 5G Link Adaption链路自适应-2-常见缩略语

    A CSI Aperiodic Channel Status Information 非周期性信道状态信息 AL Aggregation level for PDCCH 聚合等级 ATB Adaptive Transmission Band
  • 如何从一个git服务器仓库将项目迁移到另一个git服务器仓库

    最近服务器迁移涉及到代码也需要一块迁移 梳理了一些git服务迁移指令 希望大家共享 从服务器A迁移到服务器B 1 首先将服务器A上的代码进行备份 1 1 git备份指令 从A服务器 https gitlab xxxx cn 上clone代码
  • Kali环境下渗透目标(win7)虚拟机

    Kali环境下渗透目标 win7 虚拟机 注 此文章 是我看了CSDN上另一位博主的文章 我在自己在电脑上实验了一遍的结果 另外 本文仅供学习交流 用来做非法之事 本人概不负责 准备 1 在电脑上安装VMware 并下载安装虚拟机kali
  • pycharm运行YOLOv5 (一)

    登录github com search yolov5 查看选择各个版本 查看发布各个版本 点击下载版本 下载zip文件 解压之后导入pycharm 先看这个文件requirements txt 这是启动yolov5需要的各个库 pip in
  • docker启动rabbitmq后无法访问15672端口

    docker启动rabbitmq后无法访问15672端口 经查找资料得知 rabbitmq默认web界面管理插件是关闭的 只要通过命令开启就行 1 docker ps查看rabbitmq的id fb7a78201d31 2 命令进入容器do
  • vivado下载

    vitis vivado 2019 2百度网盘 链接 https pan baidu com s 11CvUL05o2NTRqN4PpnFG5Q 提取码 n82v vivado2018 2百度网盘 链接 https pan baidu co
  • javaEE 2019 10 24关于运算符 键盘录入数据

    运算符 对变量和常量的操作过程称为运算 对变量和常量进行操作的符号 运算符 算术运算符 加 减 乘 除 自增 自减 取模 字符串连接 赋值运算符
  • WEB前端 期末复习 2018.11

    WEB前端 期末复习 2018 11 名词解释部分 API Application Programming Interface 应用程序编程接口 是一些预先定义的函数 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力 而又
  • kafka不同的topic使用相同的group的问题

    前几天为了省事 在申请group的时候 就使用了原来的group 本来以为group从属于某一个topic topic不同 group之间相互不会影响 但实际情况不是这样的 kafka不同topic的consumer如果用的groupid名
  • android 下拉刷新 组件,Android实现简单的下拉刷新控件

    背景 列表控件在Android App开发中用到的场景很多 在以前我们用ListView GradView 现在应该大多数开发者都已经在选择使用RecyclerView了 谷歌给我们提供了这些方便的列表控件 我们可以很容易的使用它们 但是在
  • maven跳过单元测试-maven.test.skip和skipTests的区别以及部分常用命令

    DskipTests 不执行测试用例 但编译测试用例类生成相应的class文件至target test classes下 Dmaven test skip true 不执行测试用例 也不编译测试用例类 不执行测试用例 但编译测试用例类生成相
  • poll, select, epoll

    随着2 6内核对epoll的完全支持 网络上很多的文章和示例代码都提供了这样一个信息 使用epoll代替传统的poll能给网络服务应用带来性能上的提升 但大多文章里关于性能提升的原因解释的较少 这里我将试分析一下内核 2 6 21 1 代码
  • HDU - 1312 Red and Black(DFS)

    There is a rectangular room covered with square tiles Each tile is colored either red or black A man is standing on a bl
  • 微信小程序导出当前画布指定区域的内容并生成图片保存到本地相册(canvas)

    最近在学小程序 在把当前画布指定区域的内容导出并生成图片保存到本地这个知识点上踩坑了 这里用到的方法是 wx canvasToTempFilePath 该方法作用是把当前画布指定区域的内容导出生成指定大小的图片 并返回文件路径 详情 看文档
  • Idea快捷键大全(Windows)

    转载 Idea快捷键大全 Windows Lymanyu的博客 CSDN博客 idea快捷键
  • spring+shiro多节点session共享

    shiro我就不多介绍了 我的方案是重写 shiro的sessionDAO 把session存储到redis上 直接上代码 一 spring中配置
  • Node.js 利用Promise对象并发写入流、读取流(Stream)

    上篇文章我们用高阶函数 函数柯里化 实现并发文件读取流 写入流 今天 我们用另外一种方法实现 let fs require fa 写一个通用的读取函数 返回promise对象 function getFile filename return