来自through2文档:
你需要这个吗?
自从Node.js引入了简化流构造之后,Through2已经变得多余了。考虑一下你是否真的需要使用through2或者只是想使用'readable-stream'包,或者核心'stream'包(派生自'readable-stream')。
如果我理解正确的话,现在(从2021年开始)我们可以在没有第三方库的情况下干预流。我没有发现如何在流文档中做与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)?
你正在寻找的可能是一个Transform流,是由Node.js中包含的本地'stream'库实现的。我不知道是否有一个异步兼容的版本,但肯定有一个基于回调的版本。您需要从本机转换流继承并实现您的功能。
下面是我喜欢使用的样板文件:
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)
}))