成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

結合異步迭代器實現 Node.js 流式數據復制

開發 前端
實現可讀流到可寫流數據復制,就是不斷的讀取->寫入這個過程,那么你首先想到的是不是下面這樣呢?代碼看似很簡單,結果卻是很糟糕的,沒有任何的數據積壓處理。

[[422219]]

實現可讀流到可寫流數據復制,就是不斷的讀取->寫入這個過程,那么你首先想到的是不是下面這樣呢?代碼看似很簡單,結果卻是很糟糕的,沒有任何的數據積壓處理。如果讀取的文件很大了,造成的后果就是緩沖區數據溢出,程序會占用過多的系統內存,拖垮服務器上的其它應用,如果不明白的回顧下這篇文章 Node.js Stream 背壓 — 消費端數據積壓來不及處理會怎么樣?。

  1. // 糟糕的示例,沒有數據積壓處理 
  2. readable.on('data', data => { 
  3.   writable.write(data) 
  4. }); 

類似以上的需求,推薦你用 pipe() 方法以流的形式完成數據的復制。

作為學習,結合異步迭代器以一種簡單的方式實現一個類似于 pipe 一樣的方法完成數據源到目標源的數據復制。

數據寫入方法實現

_write 方法目的是控制可寫流的數據寫入,它返回一個 Promise 對象,如果可寫流的 dest.write() 方法返回 true,表示內部緩沖區未滿,繼續寫入。

當 dest.write() 方法返回 false 表示向流中寫入數據超過了它所能處理的最大能力限制,此時暫停向流中寫入數據,直到 drain 事件觸發,表示緩沖區中的數據已排空了可以繼續寫入,再將 Promise 對象變為解決。

  1. function _write(dest, chunk) { 
  2.   return new Promise(resolve => { 
  3.     if (dest.write(chunk)) { 
  4.       return resolve(null); 
  5.     } 
  6.  
  7.     dest.once('drain', resolve); 
  8.   })   

結合異步迭代器實現

異步迭代器使從可讀流對象讀取數據變得更簡單,異步的讀取數據并調用我們封裝的 _write(chunk) 方法寫入數據,如果緩沖區空間已滿,這里 await _write(dest, chunk) 也會等待,當緩沖區有空間可以繼續寫入了,再次進行讀取 -> 寫入。

  1. function myCopy(src, dest) { 
  2.   return new Promise(async (resolve, reject) => { 
  3.     dest.on('error', reject); 
  4.  
  5.     try { 
  6.       for await (const chunk of src) { 
  7.         await _write(dest, chunk); 
  8.       } 
  9.       resolve(); 
  10.     } catch (err) { 
  11.       reject(err); 
  12.     } 
  13.   }); 

使用如下所示:

  1. const readable = fs.createReadStream('text.txt'); 
  2. const writable = fs.createWriteStream('dest-text.txt'); 
  3. await myCopy(readable, writable); 

本文轉載自微信公眾號「Nodejs技術棧」,可以通過以下二維碼關注。轉載本文請聯系Nodejs技術棧公眾號。

 

責任編輯:武曉燕 來源: Nodejs技術棧
相關推薦

2021-03-04 23:12:57

Node.js異步迭代器開發

2020-12-08 06:28:47

Node.js異步迭代器

2021-04-06 10:15:29

Node.jsHooks前端

2022-05-05 08:02:44

MongoDBNode.js加密

2011-12-23 13:58:57

node.js

2025-01-13 00:00:00

2021-05-18 09:01:39

Node.jsJSON文件

2021-07-15 10:15:52

Node.jsJSON前端

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2021-03-16 16:16:41

GeneratorWebsockets前端

2024-06-17 08:03:51

2020-10-12 08:06:28

HTTP 服務器證書

2021-03-09 08:03:21

Node.js 線程JavaScript

2021-07-16 04:56:03

NodejsAddon

2011-11-10 08:55:00

Node.js

2012-10-24 14:56:30

IBMdw

2011-09-08 13:46:14

node.js

2011-11-01 10:30:36

Node.js

2011-09-02 14:47:48

Node
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区在线视频 | 九九爱这里只有精品 | 久久伊 | 在线免费观看a级片 | 一区二区视频在线观看 | 国产精品久久久久久一区二区三区 | 亚洲精品www久久久久久广东 | 99久久视频 | 日韩精品一二三 | 中文字幕成人在线 | 亚洲一区二区久久久 | 成人啊啊啊 | 久久久久亚洲精品国产 | 亚洲精品观看 | 久久99精品久久 | 99精品视频免费观看 | av在线免费不卡 | www.午夜| 视频1区2区 | 亚洲一区二区久久 | a在线视频观看 | 国产成人免费视频 | 亚洲国产精品久久久久秋霞不卡 | 桃色五月 | 久久一起草 | 黄色激情毛片 | 欧美日韩精品一区二区三区蜜桃 | 日韩欧美在线观看视频网站 | 91视频免费视频 | 99视频在线免费观看 | 国产成人一区在线 | 亚洲精品一区中文字幕乱码 | 波多野吉衣久久 | 高清国产午夜精品久久久久久 | 国产91丝袜在线播放 | 91精品国产色综合久久不卡98口 | 亚洲高清视频一区二区 | 亚洲一区视频 | 成人高清在线 | 成人亚洲精品 | 国产一区二区高清在线 |