实现自定义可写流的完成事件处理程序 class

Implement finish event handler of custom writable stream class

假设customWS是一个可写流..

  util.inherits(customWS, stream.Writable);

我们实现我们的逻辑来处理 _write() 中的写入,如下所示 ..

  customWS.prototype._write = function(chunk, encoding, done) {
    // ...
  }

现在要使用 customWS class,我们会做如下的事情..

  aReadableStream.pipe(new customWS()).on('finish', callback);

那么callback函数的参数是什么??

我可以传递一个 callback 比如 ..

  function(data) {
    // ...    
  }

..还是固定的??

如果没有修复那么如何在 customWS class 中实现这样的回调 ??

有没有类似..

  // in the implementation of customWS class
  customWS.prototype._finish = function(user_specified_callback) {
    user_specified_callback(some_data_say_a_bool_val);
  }

  // in the code, where i use the customWS class
  aReadableStream.pipe(new customWS()).on('finish', function(flag) {
    if (flag) {
      console.log('yes');
    }
  });

您通常不需要做任何事情来支持 finish()finish 事件及其签名记录在案 here。它没有任何参数,只是通知可写流有 "closed" 并且不能再写入。

如果作为流的实现者,您需要在可写流的 "closing" 之前专门做一些事情,那么在撰写本文时,您或多或少是不走运的。有一个 PR 将此功能添加到可写流。如果您正在实施转换流,您会得到 _flush(),这正是您想要的,但这仅在您实施双工流(不是仅可写)时才有用。