'of'与'from'运算符


151

Observable.ofObservable.from参数格式之间唯一的区别是?喜欢Function.prototype.callFunction.prototype.apply

Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})

Answers:


114

不完全的。将数组传递给时Observable.from,它和之间唯一的区别Observable.of是传递参数的方式。

然而,Observable.from将接受的说法

可以转换的可订阅对象,Promise,类似Observable的对象,数组,可迭代或类似数组的对象

对于Observable.of- 没有类似的行为-它始终仅接受值并且不执行任何转换。


193

重要的是要注意offrom传递类似数组的结构(包括字符串)之间的区别:

Observable.of([1, 2, 3]).subscribe(x => console.log(x));

将立即打印整个数组。

另一方面,

Observable.from([1, 2, 3]).subscribe(x => console.log(x));

按1打印元素。

对于字符串,行为是相同的,但是在字符级别。


如果Observable.of(1、2、3).subscribe(x => console.log(x))会怎样?
xiaoke

1
@xiaoke然后肯定是3个单独的排放(1个,然后2个,然后3个)。
Tsvetan Ovedenski

16

另一个有趣的事实是Observable.of([])订阅时将为空数组。就像当您订阅Observable.from([])一样,您将不会获得任何价值。

当您使用switchmap进行连续操作时,这一点很重要。

例如:在下面的示例中,我先保存工作,然后保存网站,然后再将评论作为流存储。

.do((data) => {
            this.jobService.save$.next(this.job.id);
        })
        .switchMap(() => this.jobService.addSites(this.job.id, this.sites)
            .flatMap((data) => {
                if (data.length > 0) {
                    // get observables for saving
                    return Observable.forkJoin(jobSiteObservables);
                } else {
                    **return Observable.of([]);**
                }
            })).do((result) => {
            // ..
        })
        .switchMap(() => this.saveComments())
....

如果没有要保存的站点,即;在addSite部分中data.length = 0时,上面的代码返回Observable.of([]),然后保存注释。但是,如果将其替换为Observable.from([]),将不会调用后续方法。

rxfiddle


5

一线差异:

       let fruits = ['orange','apple','banana']

from:逐一发射数组中的项目。例如

    from(fruits).subscribe(console.log) // 'orange','apple','banana'

of:一次发射整个数组。例如

 of(fruits).subscribe(console.log) //  ['orange','apple','banana']

注意: of 运算符的行为可以像来自具有散布运算符的运算符一样

 of(...fruits).subscribe(console.log) //  'orange','apple','banana'


0

from:从数组,promise或iterable创建可观察的对象。仅取一个值。对于数组,可迭代对象和字符串,所有包含的值将作为序列发出

const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3

of:创建具有可变数量值的可观察值,按顺序发出值,但将数组作为单个值

const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.