簡體   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