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

Rxjs Rx.Observable.create中返回的一次性签名差异,rxjs,Rxjs,我正试图找出在自定义创建的Observable上使用dispose处理程序的“正确”实现方式 返回的命名dispose函数: Rx.Observable.create(obs => { //emit values obs.onComplete(); return function dispose() { console.log('diposed'); }; }); Rx.Observable.create(obs => { //emit values

我正试图找出在自定义创建的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');
  };
});
Rx.Observable.create(obs => {
  //emit values
  obs.onComplete();

  return Rx.Disposable.create(() => {
    console.log('disposed');
  });
});
匿名函数返回:

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');
  };
});
Rx.Observable.create(obs => {
  //emit values
  obs.onComplete();

  return Rx.Disposable.create(() => {
    console.log('disposed');
  });
});
显式返回:

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');
  };
});
Rx.Observable.create(obs => {
  //emit values
  obs.onComplete();

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

它们的工作原理似乎完全相同,但文档中并没有明确说明什么是首选方式。

问题将归结为您对自己想做的事情的偏好。虽然我认为这三种用法实际上是,
未定义的
函数
一次性的
。命名函数和匿名lambda之间的选择更多的是JavaScript的区别,而不是Rx的区别,因此我鼓励您仔细阅读这些区别(语义
,调用堆栈可读性等等)

从可用性的角度来看,这其实并不重要,因为框架会将false-y值和函数封装在其中

(箭头)函数方法的一个优点是,如果您在某个时候升级到RxJS5,其中
一次性
->
订阅
,您可以避免在显式调用该类型(或进行某种全局别名)的地方进行一系列重构,因为新版本也有同样的转换魔法

选择权在你