Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RxJS订阅永远不会完成_Javascript_Filter_Rxjs - Fatal编程技术网

Javascript RxJS订阅永远不会完成

Javascript RxJS订阅永远不会完成,javascript,filter,rxjs,Javascript,Filter,Rxjs,我是rxjs的新手。我正在调用下面的一个函数,读取整个流并打印读取控制台语句,但我从未看到“Subscibe done”,我不知道为什么。要完成这条流需要什么?有什么明显的问题吗 const readline$ = RxNode.fromReadLineStream(rl) .filter((element, index, observable) => { if (index >= range.start && index < range

我是rxjs的新手。我正在调用下面的一个函数,读取整个流并打印读取控制台语句,但我从未看到“Subscibe done”,我不知道为什么。要完成这条流需要什么?有什么明显的问题吗

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
                     }
);
const readline$=RxNode.fromReadLineStream(rl)
.过滤器((元素、索引、可观察)=>{
如果(索引>=range.start&&indexRx.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(“订阅完成”);//从未调用
anotherFunc();//从未调用
}
);

您可以从源代码中看到,只有当源流发出
关闭事件时,它才会发送完整的通知

因此,如果需要调用适当的完整处理程序,则需要自己关闭流,请参阅。

换句话说,在读取整个文件后,Observable不会自动完成。

我不确定这个特定的Observable,但不是每个Observable都会完成。您要将哪个节点流传递到
RxNode.fromReadLineStream
?流本身结束了吗?是的,它是一个有限长度文件的RxNode.fromReadLineStream。最终使用readline.on close事件实现了几乎相同的结果。