The Subscribe 运算符是连接观察者和 Observable 的粘合剂。为了让观察者能够看到 Observable 发出的数据,或者接收 Observable 的错误或完成通知,它必须首先使用此运算符订阅该 Observable。
The Subscribe 运算符的典型实现可能接受一到三个方法(这些方法构成观察者),或者它可能接受一个对象(有时称为 Observer
或 Subscriber
),该对象实现了包含这三个方法的接口
onNext
onError
onNext
或 onCompleted
。The onError
方法将导致错误的原因作为其参数(有时是一个对象,例如 Exception 或 Throwable,有时是一个简单的字符串,具体取决于实现)。onCompleted
onNext
之后调用此方法。如果 Observable 在观察者订阅它之前不会开始发出数据,则称为“冷” Observable;如果 Observable 可以在任何时候开始发出数据,并且订阅者可以在其开始发出数据之后开始观察发射数据的序列,并且错过之前发射的所有数据,则称为“热” Observable。
RxGroovy 实现了几种 subscribe
的变体。
如果传递给它的是没有参数,它将触发对底层 Observable 的订阅,但将忽略其数据和通知。这将激活冷 Observable。
也可以传递一到三个函数;这些函数将被解释为以下内容:
onNext
onNext
和 onError
onNext
、onError
和 onCompleted
最后,可以传递一个实现了 Observer
或 Subscriber
接口的对象。The Observer
接口包含三个前面描述的“on
”方法。The Subscriber
接口也实现了这些方法,并添加了一些其他方法来促进响应式拉式背压,并允许 Subscriber 在 Observable 完成之前取消订阅 Observable。
对 subscribe
的调用返回一个实现了 Subscription
接口的对象。此接口包括 unsubscribe
方法,可以在任何时候调用它以断开 subscribe
在 Observable 和观察者(或代表观察者的方法)之间建立的订阅。
subscribe()
subscribe(Action1)
subscribe(Action1,Action1)
subscribe(Action1,Action1,Action0)
subscribe(Observer)
subscribe(Subscriber)
The forEach
运算符是 subscribe
的更简单版本。可以向它们传递一到三个函数,这些函数将被解释为以下内容
onNext
onNext
和 onError
onNext
、onError
和 onCompleted
与 subscribe
不同,forEach
不会返回一个对象,使用它可以取消订阅。也没有选择传递一个具有此功能的参数。因此,只有在绝对需要对 Observable 的所有数据和通知进行操作时才应使用此运算符。
forEach(Action1)
forEach(Action1,Action1)
forEach(Action1,Action1,Action0)
RxJava 实现了几种 subscribe
的变体。
如果传递给它的是没有参数,它将触发对底层 Observable 的订阅,但将忽略其数据和通知。这将激活冷 Observable。
也可以传递一到三个函数;这些函数将被解释为以下内容:
onNext
onNext
和 onError
onNext
、onError
和 onCompleted
最后,可以传递一个实现了 Observer
或 Subscriber
接口的对象。The Observer
接口包含三个前面描述的“on
”方法。The Subscriber
接口也实现了这些方法,并添加了一些其他方法来促进响应式拉式背压,并允许 Subscriber 在 Observable 完成之前取消订阅 Observable。
对 subscribe
的调用返回一个实现了 Subscription
接口的对象。此接口包括 unsubscribe
方法,可以在任何时候调用它以断开 subscribe
在 Observable 和观察者(或代表观察者的方法)之间建立的订阅。
subscribe()
subscribe(Action1)
subscribe(Action1,Action1)
subscribe(Action1,Action1,Action0)
subscribe(Observer)
subscribe(Subscriber)
The forEach
运算符是 subscribe
的更简单版本。可以向它们传递一到三个函数,这些函数将被解释为以下内容
onNext
onNext
和 onError
onNext
、onError
和 onCompleted
与 subscribe
不同,forEach
不会返回一个对象,使用它可以取消订阅。也没有选择传递一个具有此功能的参数。因此,只有在绝对需要对 Observable 的所有数据和通知进行操作时才应使用此运算符。
forEach(Action1)
forEach(Action1,Action1)
forEach(Action1,Action1,Action0)
在 RxJS 中,可以使用两种方式订阅 Observable
subscribeOnNext
、subscribeOnCompleted
或 subscribeOnError
将单个函数订阅到 Observable 的 onNext
、onCompleted
或 onError
通知。subscribe
或 forEach
运算符中来订阅(这些运算符的行为相同)。var source = Rx.Observable.range(0, 3) var subscription = source.subscribeOnNext( function (x) { console.log('Next: %s', x); });
Next: 0 Next: 1 Next: 2
var source = Rx.Observable.range(0, 3); var subscription = source.subscribeOnCompleted( function () { console.log('Completed'); });
Completed
var source = Rx.Observable.throw(new Error()); var subscription = source.subscribeOnError( function (err) { console.log('Error: %s', err); });
Error: Error
var observer = Rx.Observer.create( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); var source = Rx.Observable.range(0, 3) var subscription = source.subscribe(observer);
Next: 0 Next: 1 Next: 2 Completed
var source = Rx.Observable.range(0, 3) var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); });
Next: 0 Next: 1 Next: 2 Completed
本节中描述的函数都可以在以下发行版中找到
rx.js
rx.all.js
rx.all.compat.js
rx.compat.js
rx.lite.js
rx.lite.compat.js