在Rx.Observable.create中返回的一次性签名的差异

时间:2016-08-30 18:31:28

标签: rxjs

我正在试图找出正确的'使用Rx.Observable.create

在我自定义创建的Observable上实现dispose处理程序的方法

返回命名的dispose函数:

Rx.Observable.create(obs => {
  //emit values
  obs.onComplete();

  return function dispose() {
    console.log('diposed');
  };
});

匿名函数返回:

Rx.Observable.create(obs => {
  //emit values
  obs.onComplete();

  return () => {
    console.log('disposed');
  };
});

明确Disposable.create返回:

Rx.Observable.create(obs => {
  //emit values
  obs.onComplete();

  return Rx.Disposable.create(() => {
    console.log('disposed');
  });
});

它们似乎完全相同,但文档并不是很清楚什么是首选方式。

1 个答案:

答案 0 :(得分:2)

这将归结为您对自己想做的事情的偏好。虽然我认为这三种用途实际上是undefinedfunctionDisposable。命名函数和匿名lambda之间的选择更像是JavaScript的区别而不是Rx,所以我鼓励你阅读差异(语义this,callstack可读性等等。)。

从可用性的角度来看,它并不重要,因为框架将在either a Disposable.empty or Disposable.create respectively中包含false-y值和函数。

(箭头)函数方法的一个优点是,如果您在某些时候升级到RxJS5,其中Disposable - > Subscription你可以避免在明确调用该类型(或进行某种全局别名)时进行一大堆重构,因为新版本会执行相同类型的转换魔法。

选择取决于你。