本文介绍了带节点的时间流中的一个符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试实现一个流,它在每个数据"事件上从文件中返回一个符号.我完成了以下代码:

I'm trying implement a stream which returns one symbol from file on each 'data' event.I finished with code bellow:

var util = require('util'),
    fs = require('fs'),
    Readable = require('stream').Readable;

var util = require('util');
var Readable = require('stream').Readable;

var SymbolReadStream = function(filename, options) {
  Readable.call(this);
  this._readable = fs.createReadStream(filename, options).pause();
  self = this;
  this._readable.on('readable', function() {
    var chunk;
    chunk = self._readable.read(1);
    // I believe the problem is here
    self._readable.pause();
  });
};

util.inherits(SymbolReadStream, Readable); // inherit the prototype methods

SymbolReadStream.prototype._read = function() {
  this._readable.resume();
};

var r = new SymbolReadStream("test.txt", {
  encoding: 'utf8',
});
r.on('data', function(el) {
  console.log(el);
});

但是此代码不起作用.请帮忙.有没有更简单的方法来实现这种行为?

but this code doesn't work. Please help.Is there an easier way to achieve the behavior?

推荐答案

在您的流实现中,没有向处理程序发出数据"事件.因此,console.log 永远不会被调用.添加事件后,它们将逐个符号流式传输.下面的例子:

In you stream implementation there is no emitting 'data' event to handler. Because of it, console.log are never called. After adding events, they will be streamed symbol by symbol. Example below:

var util = require('util'),
  fs = require('fs'),
  Readable = require('stream').Readable;

function SymbolReadStream(filename, options) {
  if (!(this instanceof SymbolReadStream)) {
    return new SymbolReadStream(length, options);
  }

  Readable.call(this);
  this._readable = fs.createReadStream(filename, options);
}

util.inherits(SymbolReadStream, Readable); // inherit the prototype methods

SymbolReadStream.prototype._read = function() {
  var self = this;
  this._readable.on('readable', function() {
    var chunk;
    while (null !== (chunk = self._readable.read(1))) {
      self.emit('data', chunk);
    }
  });
  this._readable.on('end', function() {
    self.emit('end');
  });
};

var r = new SymbolReadStream("test.txt", {
  encoding: 'utf8',
});
r.on('data', function(el) {
  console.log(el);
});
r.on('end', function(el) {
  console.log('done');
});

这篇关于带节点的时间流中的一个符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 06:33