Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过流结束事件上的管道推送对象(或“错误:EOF”之后的“stream.push()”)_Node.js - Fatal编程技术网

Node.js 通过流结束事件上的管道推送对象(或“错误:EOF”之后的“stream.push()”)

Node.js 通过流结束事件上的管道推送对象(或“错误:EOF”之后的“stream.push()”),node.js,Node.js,我有一个nodejs流管道,有点像这样: source.pipe(bulkElasticSearchLookup).pipe(doWork).pipe(destination) bulkElasticSearchLookup的目的是收集传入对象,当它有10个对象时,在Elasticsearch中对所有10个对象进行批量搜索,然后进行10个单独的this.push()调用,以将这些项放入doWork转换 这将我对Elasticsearch的调用次数减少了10倍,使我的管道速度提高了约4倍 代码如

我有一个nodejs流管道,有点像这样:

source.pipe(bulkElasticSearchLookup).pipe(doWork).pipe(destination)
bulkElasticSearchLookup的目的是收集传入对象,当它有10个对象时,在Elasticsearch中对所有10个对象进行批量搜索,然后进行10个单独的this.push()调用,以将这些项放入doWork转换

这将我对Elasticsearch的调用次数减少了10倍,使我的管道速度提高了约4倍

代码如下:

EsBulkLookup.prototype._transform = function (chunk, encoding, callback) {

    var self = this;

    self.queue.push(chunk);
    if (self.queue.length === self.bulkSize) {
        var lookups = self._doLookups();
        self._pushAll(lookups);
        self.queue = [];
    }
    callback()
};

EsBulkLookup.prototype._pushAll = function (items) {
    var self = this;
    items.forEach(function (item) {
        self.push(item);
    });
};
当流结束时,self.queue中可能有一些项,因此我想将它们刷新到管道中的下一步

我试过这个:

var self = this;
this.on('end', function () {
    var lookups = self._doLookups();
    self._pushAll(lookups);
});
这给了我:

Error: stream.push() after EOF

当流结束时,如何将转换中的项目刷新到管道中的下一个阶段?

我的问题文本包含一条线索:“刷新”

转换。\u刷新(回调)

回调函数在刷新完所有剩余数据后调用此函数(可选地使用错误参数)

EsBulkLookup.prototype._flush = function (callback) {
    var lookups = this._doLookups();
    this._pushAll(lookups);
};