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