RxJS订阅永远不会完成

时间:2017-06-04 02:02:07

标签: javascript filter rxjs

我对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
                     }
);

1 个答案:

答案 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在读完整个文件后不会自动完成。