我对rxjs很新。我在下面调用一个函数,读取完整的流并打印读取的控制台语句,但我从未看到" Subscibe已完成"而且我不知道为什么。如何完成此流程需要什么?显然是错的吗?
const readline$ = RxNode.fromReadLineStream(rl)
.filter((element, index, observable) => {
if (index >= range.start && index < range.stop) {
console.log(`kept line is ${JSON.stringify(element)}`);
return true;
} else {
console.log(`not keeping line ${JSON.stringify(element)}`);
return false;
}
})
.concatMap(line => Rx.Observable.fromPromise(myFunction(line)))
.do(response => console.log(JSON.stringify(response)));
readline$.subscribe(i => { console.log(`Subscribe object: ${util.inspect(i)}`); },
err => { console.error(`Subscribe error: ${util.inspect(err)}`); },
done => { console.log("Subscribe done."); // NEVER CALLED
anotherFunc(); // NEVER CALLED
}
);
答案 0 :(得分:1)
您可以从源代码中看到,只有在源流发出close
事件时才会发送完整通知。 https://github.com/Reactive-Extensions/rx-node/blob/master/index.js#L100-L102
因此,如果您需要调用正确的完整处理程序,则需要自行关闭该流,请参阅How to close a readable stream (before end)?。
换句话说,Observable在读完整个文件后不会自动完成。