【发布时间】:2014-11-10 16:32:36
【问题描述】:
我正在实现一个可读流。在我的_read() 实现中,流的源是需要异步调用的Web 服务。为什么_read()不提供我的异步调用返回时可以调用的done回调函数?
Transform 流和 Writable 流都支持这一点。为什么不可读?我只是不正确地使用了可读流吗?
MyReadStream.prototype._read = function() {
doSomethingAsync('foo', function(err, result) {
if (result) {
this.push(result);
} else {
this.push(null);
}
// why no done() available to call like in _write()?
// done();
}
}
在我的实际实现中,我不想再次调用doSomethingAsync,直到之前的调用返回。如果没有 done 回调供我使用,我必须实现自己的节流机制。
【问题讨论】:
-
您不能使用
end事件吗? nodejs.org/api/stream.html#stream_event_end -
这表示该流已完全从其源读取。我只想表示一次 _read() 调用已完成从源代码的读取。
-
你当然是对的,我的错。再次查看文档,是否需要
done()回调?推入this,假设它继承自stream.Readable,应该触发新的读取以及触发可读事件。我可能大错特错,因为我只使用过而不是实现自己的流阅读器。
标签: node.js