2016-11-28 211 views
2

採取的行動我想在觀察者訂閱Observable並取消訂閱時採取一些特殊操作。我當然可以覆蓋subscribe()unsubscribe()方法,但看起來很糟糕。 在創建observable時,沒有辦法提供回調函數,每當有人訂閱/取消訂閱時都會調用回調函數。 BR, Daniel對RxJS中的訂閱()和取消訂閱()

回答

3

這是Observable.create的用途。您可以使用指定的附加/分離處理程序創建自己的observable,甚至可以僅用2行代碼來包裝現有的observable。

const obs = Rx.Observable.create(observer => { 
 
    console.log('attach'); 
 
    // If you want to wrap another observable, call this: 
 
    // const subs = other.subscribe(observer); 
 
    return() => { 
 
    // subs.unsubscribe(); 
 
    console.log('detach'); 
 
    }; 
 
}); 
 

 
console.log('subscribe subscription1'); 
 
const subscribtion1 = obs.subscribe(() => {}); 
 
console.log('subscribe subscription2'); 
 
const subscribtion2 = obs.subscribe(() => {}); 
 
setTimeout(() => { 
 
    console.log('subscribtion1.dispose()'); 
 
    subscribtion1.unsubscribe(); 
 
}, 500); 
 
setTimeout(() => { 
 
    console.log('subscribtion2.dispose()'); 
 
    subscribtion2.unsubscribe(); 
 
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-rc.4/Rx.js"></script>

+0

我絕對沒有帶入反應的編程。非常感謝解釋。 – Daniel