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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:23:59
字體:
供稿:網(wǎng)友

這篇文章主要介紹了舉例講解Node.js中的Writable對象,是Node.js入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

只要有玩過 nodejs,那就一定接觸過 Writable。http 模塊的請求回調(diào)參數(shù)中的 res 參數(shù)就是一個(gè) Writable 對象。我們經(jīng)常會(huì)往上面 write 一堆東西,最后調(diào)用個(gè) end 方法吧?這些都屬于 Writable 的行為。

我們手動(dòng)創(chuàng)建的 Writable 對象是交給用戶使用的,那么 write 和 end 方法都是用戶調(diào)用的。作為提供方,我們?nèi)绾沃雷约旱?Writable 對象被用戶執(zhí)行了什么操作呢?就猜這個(gè) API 吧,我首先會(huì)猜到某個(gè)事件。然而并不是!同 Readable 一樣,它也得覆寫某個(gè)方法來監(jiān)聽操作。下面是創(chuàng)建一個(gè) Writable 讓用戶往里面寫入內(nèi)容,并監(jiān)聽用戶到底寫了什么的例子(基于 babel-node):

 

 
  1. import stream from 'stream'
  2.  
  3. var w = new stream.Writable; 
  4.  
  5. w._write = (buffer, enc, next) => { 
  6. console.log(buffer + ''); 
  7. next(); // 觸發(fā)「寫入完成」 
  8. }; 
  9.  
  10. w.on('finish', () => { 
  11. console.log('finish'); 
  12. }); 
  13.  
  14. void function callee(i) { 
  15. if(i < 10) { 
  16. w.write(i + '''utf-8', () => { 
  17. // 寫入完成 
  18. }); 
  19. else { 
  20. w.end(); 
  21. setTimeout(callee, 10, i + 1); 
  22. }(0); 

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

 

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

另外,write 被設(shè)計(jì)為一個(gè)異步方法,它又第三個(gè)參數(shù)可以傳入完成的回調(diào)。而所謂完成就是在實(shí)現(xiàn)函數(shù) _write 中,next 參數(shù)被調(diào)用。把 write 設(shè)計(jì)成異步是有原因的,如果它是同步執(zhí)行,那么當(dāng)我們需要在 _write 方法中處理一些異步事務(wù)時(shí)就可能產(chǎn)生順序出錯(cuò)。比如一個(gè)磁盤文件的寫操作就是一個(gè)異步的,如果我們寫文件無視這個(gè)異步,那么假如上一個(gè)寫操作被堵塞還沒完成,當(dāng)前的寫操作可能會(huì)先執(zhí)行。所以我們應(yīng)該在 _write 中合理地調(diào)用 next(必須調(diào)用,否則將陷入等待,無法繼續(xù)寫)。

最后,當(dāng)數(shù)據(jù)寫完成后會(huì)觸發(fā) finish 事件,這就意味著 end 方法被用戶調(diào)用了。如果其間做的是寫文件的操作,此時(shí)就應(yīng)該關(guān)閉文件。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 徐水县| 象山县| 河间市| 普陀区| 宣威市| 伊金霍洛旗| 安福县| 桐庐县| 那曲县| 阿巴嘎旗| 盐源县| 屏山县| 梅河口市| 巧家县| 三江| 青浦区| 卢龙县| 德令哈市| 礼泉县| 台州市| 浏阳市| 新乐市| 南华县| 兴文县| 高邮市| 青神县| 东莞市| 南木林县| 伊春市| 云南省| 中西区| 河间市| 贞丰县| 绥江县| 开化县| 信阳市| 独山县| 芦山县| 大田县| 崇阳县| 湘乡市|