说我有一个返回值的函数:
function f(thing){
//do stuff
return result;
}
在某些情况下,我想将此函数用作转换流中的transform()
函数,我可以使用类似于util.promisify()
的函数将其“流化”:
function streamify(func){
return function(chunk, encoding, callback){
this.push(func(chunk));
callback();
}
}
但是说我有一个类,其中包含一个表示资源的对象,并且我想在流中使用该类的方法。例如:
class c {
constructor(args){
this.resource = new SomeResource(args.something);
}
classMethod(thing){
//do stuff
this.resource.func();
//do more stuff
return result;
}
}
如果我只是将函数传递给流构造函数,或者甚至使用上面的streamify()
,则在调用函数this
时,它引用的是流,而不是类,因此该函数会生成错误因为this.resource
在该上下文中不存在。我可以做这样的事情:
someStream.resource = myClass.resrouce;
但是我总是给人以直接修改这样的原型的印象。
我正在寻找是否有一种方法可以不必扩展Stream类并实现一个全新的类来完成此任务。仅仅能够在转换流的上下文中使用第3方库中的1个函数或我自己的库中的1个函数似乎就太过了。