欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2015年07月29日 10:46:31   投稿:goldensun  
這篇文章主要介紹了舉例講解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):

import stream from 'stream';

var w = new stream.Writable;

w._write = (buffer, enc, next) => {
 console.log(buffer + '');
 next(); // 觸發(fā)「寫入完成」
};

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 被設(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)閉文件。

相關(guān)文章

  • nodejs爬蟲抓取數(shù)據(jù)之編碼問題

    nodejs爬蟲抓取數(shù)據(jù)之編碼問題

    這篇文章主要介紹了nodejs爬蟲抓取數(shù)據(jù)之編碼問題的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • npm國內(nèi)鏡像 安裝失敗的幾種解決方案

    npm國內(nèi)鏡像 安裝失敗的幾種解決方案

    這篇文章主要給大家總結(jié)了npm國內(nèi)鏡像npm安裝失敗的幾種解決方案,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下來一起看看吧。
    2017-06-06
  • MQTT Client實(shí)現(xiàn)消息推送功能的方法詳解

    MQTT Client實(shí)現(xiàn)消息推送功能的方法詳解

    這篇文章主要介紹了MQTT Client實(shí)現(xiàn)消息推送功能的方法,結(jié)合實(shí)例形式詳細(xì)分析了MQTT Client實(shí)現(xiàn)消息推送的基本原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2023-05-05
  • nodejs 遞歸拷貝、讀取目錄下所有文件和目錄

    nodejs 遞歸拷貝、讀取目錄下所有文件和目錄

    這篇文章主要介紹了nodejs 遞歸拷貝、讀取目錄下所有文件和目錄,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 使用Node.js腳本自動(dòng)統(tǒng)計(jì)代碼量的實(shí)現(xiàn)代碼

    使用Node.js腳本自動(dòng)統(tǒng)計(jì)代碼量的實(shí)現(xiàn)代碼

    手動(dòng)統(tǒng)計(jì)代碼行數(shù)通常會(huì)耗費(fèi)大量時(shí)間和精力,為了提高統(tǒng)計(jì)效率并減少人為錯(cuò)誤,我們可以借助自動(dòng)化工具來完成這項(xiàng)任務(wù),本文將介紹如何使用 Node.js 腳本來自動(dòng)化統(tǒng)計(jì)項(xiàng)目代碼行數(shù),讓我們能夠輕松快捷地獲取項(xiàng)目的代碼量信息,需要的朋友可以參考下
    2023-12-12
  • Node.js入門筆記?之a(chǎn)sync模塊

    Node.js入門筆記?之a(chǎn)sync模塊

    這篇文章主要介紹了Node.js入門筆記?之a(chǎn)sync模塊,async是一個(gè)異步處理模塊,主要有三個(gè)方式:串行無關(guān)聯(lián)、并行無關(guān)聯(lián)?、串行有關(guān)聯(lián),文章圍繞主題展開更多的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • 在 Node.js 中使用 async 函數(shù)的方法

    在 Node.js 中使用 async 函數(shù)的方法

    利用 async 函數(shù),你可以把基于 Promise 的異步代碼寫得就像同步代碼一樣。一旦你使用 async 關(guān)鍵字來定義了一個(gè)函數(shù),那你就可以在這個(gè)函數(shù)內(nèi)使用 await 關(guān)鍵字。下面通過本文給大家分享Node.js 中使用 async 函數(shù)的方法,一起看看吧
    2017-11-11
  • Nodejs學(xué)習(xí)item【入門手上】

    Nodejs學(xué)習(xí)item【入門手上】

    這篇文章主要介紹了Nodejs學(xué)習(xí)item【入門手上】,需要的朋友可以參考下
    2016-05-05
  • 深入了解Node.js中的一些特性

    深入了解Node.js中的一些特性

    這篇文章主要介紹了深入了解Node.js中的一些特性,本文對EventEmitter、Streams、Coding Style、Linting、Coding Style等特性進(jìn)行分析探討,需要的朋友可以參考下
    2014-09-09
  • 利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子

    利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子

    其實(shí)以前就寫過如何使用React-router和Webpack快速構(gòu)建一個(gè)react程序。后來發(fā)現(xiàn)版本太老,于是乎最近又重新組織了下結(jié)構(gòu),使用最近發(fā)布的yarn作為包管理工具,介紹下基本安裝步驟,有需要的朋友們下面來一起看看吧。
    2016-10-10

最新評論