对subscribe()和unsubscribe()的操作

时间:2016-11-28 15:33:23

标签: javascript rxjs observable rxjs5 subject

在RxJS中我想在Observer订阅Observable并取消订阅时采取一些特殊操作。我当然可以覆盖subscribe()unsubscribe()方法,但这似乎很糟糕。 在创建observable时是不是有办法提供在有人订阅/取消订阅时调用的回调? BR, 丹尼尔

1 个答案:

答案 0 :(得分:4)

这是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>