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
。这些类型包括:
- 数组
- 承诺
- 发电机
- 可观察的东西
您还可以找到特定的转换器,例如 fromArray
和 fromPromise
,它们专门转换这些类型,但 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 事件
这两个有什么区别?
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
。这些类型包括:
- 数组
- 承诺
- 发电机
- 可观察的东西
您还可以找到特定的转换器,例如 fromArray
和 fromPromise
,它们专门转换这些类型,但 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 事件