[英]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.