创建操作符的定义
1 | public static create(onSubscription: function(observer: Observer): TeardownLogic): Observable |
创建一个新的Observable,当观察者(Observer)订阅该Observable时,执行指定的函数。
创建自定义的Observable,它可以做任何你想做的事。
例如,我们随便创建一个:
1 | const observable = Observable.create((observer) => { |
create
将onSubscription
函数转化为一个实际的Observable。每当有订阅该Observable时,onSubscription
函数将会接受Observer
实例作为唯一参数执行。onSubscription
应该调用观察者对象的next
、error
和complete
方法。
- 带值调用
next
会将该值发出给观察者 - 调用
complete
意味着该Observable
结束了发出并且不会做任何事 - 调用
error
意味着出现了错误,传给error
的阐述应该提供详细的错误信息
一个格式良好的Observable
可以通过next
方法发出任意多个的值,但是complete
和error
方法只能被调用一次,并且调用之后不会再调用任何方法。如果试图在Observable已经完成或发生错误之后调用next
、complete
、error
方法,这些调用将会被忽略。不一定非要在某个时刻调用complete
方法,创建一个不会终止的Observable也是可以的。
onSubscription
可以选择性的返回一个函数或者一个拥有unsubscribe
方法的对象,当要取消对Observable的订阅时,函数或方法会被调用,清理所有的资源。这样可以减少不必要的触发,节省宿主的计算能力。
绝大多数情况下你不需要使用create
,因为现有操作符创建出来的Observable能满足绝大多数使用场景,这也就意味着,create
是允许你创建或任何Observable的底层机制,如果有非常特殊的需求的话,可以使用它,其他情况尽量选择已存在的操作符。
因为Observable继承的类以及定义了静态create
方法,但是签名不同,不可能给Observable.create
合适的签名。正因为如此,给create
传递的函数将不会进行类型检查。当使用TypeScript时,建议传递给create
函数签名声明为(observer: Observer) => TeardownLogic
,其中Observer
和TeardownLogic
是库提供的接口。
例如:
1 | const observable = Observable.create((observer: Observer<number>): TeardownLogic => { |
创建操作符还有其他的类似of
和form
等,create
是偏底层的创建Observable的操作符,of
是轻松方便创建的操作符。一般情况下直接用of
就可以满足,实在有特殊需求的话就用create
。