国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

舉例講解Node.js中的Writable對象

2019-11-20 11:58:15
字體:
來源:轉載
供稿:網友

只要有玩過 nodejs,那就一定接觸過 Writable。http 模塊的請求回調參數中的 res 參數就是一個 Writable 對象。我們經常會往上面 write 一堆東西,最后調用個 end 方法吧?這些都屬于 Writable 的行為。
  我們手動創建的 Writable 對象是交給用戶使用的,那么 write 和 end 方法都是用戶調用的。作為提供方,我們如何知道自己的 Writable 對象被用戶執行了什么操作呢?就猜這個 API 吧,我首先會猜到某個事件。然而并不是!同 Readable 一樣,它也得覆寫某個方法來監聽操作。下面是創建一個 Writable 讓用戶往里面寫入內容,并監聽用戶到底寫了什么的例子(基于 babel-node):

import stream from 'stream';var w = new stream.Writable;w._write = (buffer, enc, next) => { console.log(buffer + ''); next(); // 觸發「寫入完成」};w.on('finish', () => { console.log('finish');}); void function callee(i) { if(i < 10) {  w.write(i + '', 'utf-8', () => {   // 寫入完成  }); } else {  w.end(); } setTimeout(callee, 10, i + 1);}(0);

  同 Readable 的 _read 一樣,如果上面的 _write 沒有被覆寫將拋出異常:

Error: not implemented  at Writable._write (_stream_writable.js:430:6)  at doWrite (_stream_writable.js:301:12)

  另外,write 被設計為一個異步方法,它又第三個參數可以傳入完成的回調。而所謂完成就是在實現函數 _write 中,next 參數被調用。把 write 設計成異步是有原因的,如果它是同步執行,那么當我們需要在 _write 方法中處理一些異步事務時就可能產生順序出錯。比如一個磁盤文件的寫操作就是一個異步的,如果我們寫文件無視這個異步,那么假如上一個寫操作被堵塞還沒完成,當前的寫操作可能會先執行。所以我們應該在 _write 中合理地調用 next(必須調用,否則將陷入等待,無法繼續寫)。
  最后,當數據寫完成后會觸發 finish 事件,這就意味著 end 方法被用戶調用了。如果其間做的是寫文件的操作,此時就應該關閉文件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北票市| 临高县| 田阳县| 阿克苏市| 吉林市| 馆陶县| 辽中县| 循化| 临朐县| 延寿县| 新野县| 西华县| 安岳县| 阿合奇县| 呈贡县| 泰来县| 衡南县| 内乡县| 观塘区| 衡阳县| 华亭县| 岳阳市| 贵德县| 宿州市| 曲松县| 丹阳市| 云浮市| 吉木乃县| 钟山县| 安仁县| 天柱县| 兰坪| 奈曼旗| 克什克腾旗| 深圳市| 抚顺市| 象山县| 屏山县| 富锦市| 尼玛县| 天峻县|