node.js - Node : Actual native substitute for "through2" for intervention to steams in 2021

标签 node.js through2

来自through2文档:

Do you need this?

Since Node.js introduced Simplified Stream Construction, many uses of through2 have become redundant. Consider whether you really need to use through2 or just want to use the 'readable-stream' package, or the core 'stream' package (which is derived from 'readable-stream').

如果我理解正确,现在(从 2021 年开始)我们可以在没有第三方库的情况下干预流。 我没有在 Stream documentation 中找到如何做与 through2 相同的事情| .

// ...
  .pipe(through2(function (file, encoding, callback) {
    // Do something with file ...
    callback(null, file)
   }))

// ↑ Possible to reach the same effect natively (with core packages)?

我想,到 2021 年,一定会有一些方法支持 async/await 语法:

// ...
  .pipe(newFeatureOfModernNodeJS(async function (file) {

    await doSomethingAsyncWithFile(file);
    // on fail - same effect as "callback(new Error('...'))" of trough2

    return file; // same effect as "callback(null, file)" of trough2

    // or
    return null; // same effect as `callback()` of trough2
   }))

// ↑ Possible to reach the same effect natively (with core packages)?

最佳答案

您正在寻找的可能是转换流,它是由 Node.js 中包含的 native “流”库实现的。我不知道还有异步兼容版本,但肯定有基于回调的版本。您需要继承原生的 Transform 流并实现您的功能。

这是我喜欢使用的样板:

const Transform = require('stream').Transform;
const util      = require('util');

function TransformStream(transformFunction) {
  // Set the objectMode flag here if you're planning to iterate through a set of objects rather than bytes
  Transform.call(this, { objectMode: true });
  this.transformFunction = transformFunction;
}

util.inherits(TransformStream, Transform);

TransformStream.prototype._transform = function(obj, enc, done) {
  return this.transformFunction(this, obj, done);
};

module.exports = TransformStream;

现在你可以在你想用的地方使用它:

const TransformStream = require('path/to/myTransformStream.js');
//...
.pipe(new TransformStream((function (file, encoding, callback) {
    // Do something with file ...
    callback(null, file)
 }))

关于node.js - Node : Actual native substitute for "through2" for intervention to steams in 2021,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66007171/

相关文章:

node.js - RiveScript 与 Meteor

javascript - 将参数传递给 Promise 序列

Node.js 堆快照和 Google Chrome 快照查看器

javascript - 从 URL 下载 Torrent 文件

javascript - 如何将实时文件更新从 Node js服务器(express)发送到 Angular js

node.js - 获取 through2 流的 JSON/字符串?

node.js - 使用 Through2 从 Vinyl 流创建多个文件

javascript - Node JS async/await 与多个 fs.writeFile 使用 through2 (Gulp/Vinyl)

node.js - 为什么我的控制台记录 : `TimeoutOverflowWarning: 4294967296000 does not fit into a 32-bit signed integer`