为什么setTimeout在我的流实现中表现为这种方式?

时间:2018-09-16 17:19:02

标签: javascript settimeout node-streams

此代码的最后一行成功调用了节点中自定义双工流的_read方法。

const timeContext = new TimeContext(sampleRate);
const input = new InputStream(timeContext); // Stream.Readable
const throttle = new Throttle(sampleRate); // Stream.Transform

const stackSource = [];

const stack = new StackStream(stackSource); // Stream.Duplex

input.pipe(throttle).pipe(stack);

stack.read(); // This will call the _read method of StackStream

添加setTimeout以延迟stream.read()调用,不会调用setTimeout的回调:

const timeContext = new TimeContext(sampleRate);
const input = new InputStream(timeContext); // Stream.Readable
const throttle = new Throttle(sampleRate); // Stream.Transform

const stackSource = [];

const stack = new StackStream(stackSource); // Stack.Duplex

input.pipe(throttle).pipe(stack);

setTimeout(() => {
    stack.read(); // This callback never gets called
}, 1000);

2 个答案:

答案 0 :(得分:0)

它肯定会被调用,但是还有其他错误

option

它只是表现不正常,因为正在发生其他一些错误。在控制台中查看会引发什么错误。

答案 1 :(得分:0)

看起来,read()函数是堆栈对象的本地属性,而setTimeout无法看到堆栈对象的此本地属性。这就是为什么它以这种方式表现。

请参阅此解决方案以供参考,

https://stackoverflow.com/a/4536268/10371717