如何在NodeJS中“流化”功能?

时间:2019-02-14 01:16:54

标签: node.js stream

说我有一个返回值的函数:

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个函数似乎就太过了。

0 个答案:

没有答案