是可观察对象之间唯一的区别。和Observable.from arguments format?比如Function.prototype.call和Function.prototype.apply?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
是可观察对象之间唯一的区别。和Observable.from arguments format?比如Function.prototype.call和Function.prototype.apply?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
当前回答
From以块的形式返回通知,即一个接一个。 例如:from("abcde")将返回a => b => c => d => e 返回完整的通知。 例如:of("abcde")将返回abcde。
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
其他回答
不完全是。当将数组传递给Observable.from时,它与Observable.from之间唯一的区别是。是参数传递的方式。
然而,Observable.from将接受一个参数
可订阅对象、Promise对象、类observable对象、Array对象、可迭代对象或要转换的类数组对象
Observable没有类似的行为。的,它总是只接受值并且不执行转换。
from操作符获取事件源。从(源)
let array = [1,2,3,4,5]
from(array); //where array is source of events, array[of events]
let promise = new Promise(function(resolve, reject) {
// executor (the producing code, "singer")
});
from(promise); //where promise is source of event, promise(of event)
let observable = Observable.create(function(observer) {
observer.next(1);
observer.next(2);
observer.next(3);
observer.next(4);
observer.next(5);
observer.complete();
});
from(observable); // where obsservable is source of events.
运算符of接受单个事件。(event1, event2, event3)
of(1,2,3,4,5); // where 1,2,3,4,5 are individual events
在传递一个类数组结构(包括字符串)时,注意of和from之间的区别是很重要的:
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
会立刻打印出整个数组。
另一方面,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
逐个打印元素。
对于字符串,行为是相同的,但在字符级别。
另一个有趣的事实是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部分,length = 0,上面的代码返回Observable.of([]),然后保存注释。但是如果你用Observable.from([])替换它,后续的方法将不会被调用。
rxfiddle
一行区别:
let fruits = ['orange','apple','banana']
from:从数组中逐个生成项。例如
from(fruits).subscribe(console.log) // 'orange','apple','banana'
of:一次性释放整个数组。例如
of(fruits).subscribe(console.log) // ['orange','apple','banana']
注:of运算符可以表现为from运算符与展开运算符
of(...fruits).subscribe(console.log) // 'orange','apple','banana'