Rumah  >  Artikel  >  hujung hadapan web  >  Contoh untuk menerangkan objek Boleh Tulis dalam Node.js_node.js

Contoh untuk menerangkan objek Boleh Tulis dalam Node.js_node.js

WBOY
WBOYasal
2016-05-16 15:48:191463semak imbas

Selagi anda telah bermain dengan nodejs, anda mesti telah berhubung dengan Writable. Parameter res dalam parameter panggil balik permintaan modul http ialah objek Boleh Tulis. Kami sering menulis banyak perkara kepadanya dan akhirnya memanggil kaedah penamat, bukan? Ini semua adalah tingkah laku Boleh Ditulis.
Objek Boleh Tulis yang kami cipta secara manual diberikan kepada pengguna, jadi kaedah tulis dan akhir dipanggil oleh pengguna. Sebagai pembekal, bagaimana kita tahu operasi yang objek Boleh Tulis kita telah dilakukan oleh pengguna? Teka sahaja API ini, saya akan meneka acara tertentu terlebih dahulu. Tetapi tidak! Seperti Readable, ia juga perlu mengatasi kaedah untuk mendengar operasi. Berikut ialah contoh mencipta Boleh Tulis untuk membolehkan pengguna menulis kandungan ke dalamnya dan memantau perkara yang ditulis oleh pengguna (berdasarkan 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);

Sama seperti _readable's Readable, jika _write di atas tidak ditimpa, pengecualian akan dilemparkan:

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

Selain itu, tulis direka bentuk sebagai kaedah tak segerak dan parameter ketiganya boleh dihantar dalam panggilan balik penyiapan. Penyelesaian yang dipanggil ialah dalam fungsi pelaksanaan _write, parameter seterusnya dipanggil. Terdapat sebab mengapa tulis direka bentuk untuk tidak segerak Jika ia dilaksanakan secara serentak, ralat jujukan mungkin berlaku apabila kita perlu mengendalikan beberapa transaksi tak segerak dalam kaedah _write. Contohnya, operasi tulis fail cakera adalah tak segerak Jika kita mengabaikan operasi tak segerak ini semasa menulis fail, maka jika operasi tulis sebelumnya disekat dan belum selesai, operasi tulis semasa boleh dilaksanakan terlebih dahulu. Oleh itu, kita sepatutnya memanggil seterusnya dalam _write secara munasabah (mesti dipanggil, jika tidak, ia akan terperangkap dalam menunggu dan tidak dapat meneruskan penulisan).
Akhirnya, apabila penulisan data selesai, acara penamat akan dicetuskan, yang bermaksud kaedah penamat dipanggil oleh pengguna. Jika anda melakukan operasi menulis fail, anda harus menutup fail pada masa ini.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn