繁体   English   中英

为什么在RxJS中“ finally”在这种情况下不起作用?

[英]Why doesn't `finally` work in this case in RxJS?

这不会显示“拖动结束”:

mouseDrags.forEach(drag => {
    console.log('drag start');
    drag.finally(_ => console.log('drag end'));
    drag.forEach(doSomething);
});

但这会显示“拖动结束”:

mouseDrags.forEach(drag => {
    console.log('drag start');
    drag.finally(_ => console.log('drag end')).forEach(_=>_);
    drag.forEach(doSomething);
});

为什么forEach有所作为?

这是因为.finally()返回您需要订阅的另一个Observable。 Observable s默认情况下是惰性的,因此它们只有被订阅后才会开始发出。

所以你可以做

mouseDrags.forEach(drag => {
    console.log('drag start');
    drag.finally(_ => console.log('drag end')).forEach(doSomething);
});

甚至更好

mouseDrags.flatMap(drag => {
    console.log('drag start');
    return drag.finally(_ => console.log('drag end'))  
}).forEach(doSomething);

drag是什么类型? 如果它是可观察的,则需要订阅它。 finally没有订阅,但是forEach订阅了。 您可以通过调用drag.finally(_ => console.log('x')).subscribe() 那也应该打印出来。

实际上,forEach是subscription的别名 ,因此可以使用其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM