这两者之间的区别是什么?
return Observable.create(function(observer) {
if (array)
observer.next([]);
else
observer.next(null);
observer.complete();
});
和
return Observable.from( array ? [] : null );
我认为它可能是相同的但是没有相同的工作。
答案 0 :(得分:16)
create(...)
是用于创建Observable
的通用Observable
工厂方法,您将在其中明确指示如何将值传递给Subscriber
例如,如果你要创建一个计时器基础Observable
(不要它已经存在为Observable.timer
),你可以这样做:
Observable.create(observer => {
const timeoutId = setTimeout(() => {
observer.next(0);
observer.complete();
}, 500);
return () => clearTimeout(timeoutId);
});
from(...)
就是我所说的一致性运算符,因为它试图将传入的数据类型强制转换为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();
答案 1 :(得分:0)
一个区别是:Declare @table table (user_id int, event_code int, total_bookmarks int, total_folders int, folder_depth int, ts decimal(18,0))
Insert into @table (user_id , event_code , total_bookmarks , total_folders , folder_depth , ts)
Values (0,8,34,6,1,128926),
(0,8,34,6,1,129001),
(4, 8, 18 , 2, 1, 123870),
(6, 8, 30, 2, 1, 130099),
(6, 8, 30, 2, 1, 132000),
(6, 8, 30, 2, 1, 147778)
Select * from @table
Select user_id,event_code,total_bookmarks,total_folders,folder_depth,ts
From (
Select RANK() over (Partition by user_id
Order by ts desc
) as Rank,
user_id,event_code,total_bookmarks,total_folders,folder_depth,ts
From @table
) D1
Where D1.Rank = 1
特别禁止Observable.from()
作为它接受的内容。所以第一种方法是创建一个可观察的返回null
。 (尽管如此,请参阅已接受的答案。)
更好(更短)的方式是使用just:
null
但我无法找到它的位置或如何导入它。
return Observable.just( array ? [] : null );
这并不存在于我的rxjs发行版中
修改: import 'rxjs/add/operator/just';
已重命名为just
,请参阅接受的答案。
答案 2 :(得分:0)
当你返回一个数组时,差异是'create / next'将立即发出整个数组,但'from'会发出每个项目的长度,因此对于订阅者来说,
Observable.create(observer => observer.next(myArray))
将触发onNext事件一次以返回myArray,而Observable.from(myArray)
将发出许多onNext事件以每次返回一个项目。
答案 3 :(得分:0)
Observable.from():
您有一个值列表(与Rx无关),并且从该列表 创建了一个Observable。当观察者订阅该Observable时,值列表将作为Next()事件一个接一个地传递,然后最终传递Completed(),您将无法控制此过程。
Observable.create():
通过将事件列表(而不是值)传递给观察者来创建观察者。您可以控制事件的顺序。如果您未调用onCompleted,则不会自动调用它。您可以故意在两个事件之间调用onError(用于测试)。