RxJS:Observable.create() 与 Observable.from()

RxJS: Observable.create() vs. Observable.from()

这两个有什么区别?

return Observable.create(function(observer) {
    if (array)
        observer.next([]);
    else
        observer.next(null);
    observer.complete();
});

return Observable.from( array ? [] : null );

我认为它可能是一样的,但效果不一样。

一个区别是:Observable.from() 明确禁止 null 作为它接受的内容。所以第一个是创建可观察返回 null 的变通方法。 (不过,请参阅接受的答案以了解主要区别。)

更好(更短)的方法是使用 just:

return Observable.just( array ? [] : null );

但我找不到从哪里获得它或如何导入它。

import 'rxjs/add/operator/just';

我的 rxjs 发行版中没有这个。
编辑: just 已重命名为 of,请参阅接受的答案。

create(...) 是用于创建 Observable 的通用 Observable 工厂方法,您可以在其中明确指定如何将值传递给 Subscriber

例如,如果您要创建一个计时器基础 Observable(它不是已经存在 Observable.timer),您可以这样做:

   Observable.create(observer => {
     const timeoutId = setTimeout(() => {
       observer.next(0);
       observer.complete();
     }, 500);

     return () => clearTimeout(timeoutId);
   });

from(...) 就是我所说的 conformance 运算符,因为它试图将传入的数据类型强制转换为 Observable(使其符合).这意味着它将接受多种类型并将它们转换为Observables。这些类型包括:

  • 数组
  • 承诺
  • 发电机
  • 可观察的东西

您还可以找到特定的转换器,例如 fromArrayfromPromise,它们专门转换这些类型,但 from 更多的是这些方法的瑞士军刀

如果您只需要一个值,您应该使用 Observable.of(文档似乎已过时,just/return 在 RxJS 5 中重命名为 of,我不不要再认为他们是别名了)。

// Don't quote me on the import part
import 'rxjs/add/observable/of';

Observable.of(1, 2, 3, 4).subscribe();

当你 return 一个数组时,不同之处在于 'create/next' 会一次发出整个数组,而 'from' 会发出每个项目的次数与它的长度一样多,所以对订阅者来说,

Observable.create(observer => observer.next(myArray)) 将向 return myArray 触发一次 onNext 事件,而 Observable.from(myArray) 将每次向 return 一个项目触发许多 onNext 事件。

Observable.from():
你有一个值列表(与 Rx 无关)并且 Observable 是从这个列表创建的。当观察者订阅这个 Observable 时,值列表作为 Next() 事件一个接一个地传递,然后 Completed() 最终被传递,你无法控制这个过程。

Observable.create():
您可以通过一个一个地显式发出事件来创建事件序列。因此,您可以随时发出 OnCompleted 和 OnError 事件