这次给大家带来Rxjs的使用详解,使用Rxjs的注意事项有哪些,下面就是实战案例,一起来看一下。
一个可观察对象的执行期间,零个到无穷多个next通知被发送。如果Error或者Complete通知一旦被发送,此后将不再发送任何值。
可观察对象严格的坚守这个契约,所以,下面的代码将不会发送包含数值4的next通知
var observable = Rx.Observable.create(function subscribe(observer) { observer.next(1); observer.next(2); observer.next(3); observer.complete(); observer.next(4); // Is not delivered because it would violate the contract});
不失为一个好方式的是,使用try/catch语句包裹通知语句,如果捕获了异常将会发送一个错误通知。
var observable = Rx.Observable.create(function subscribe(observer) {try { observer.next(1); observer.next(2); observer.next(3); observer.complete(); } catch (err) { observer.error(err); // delivers an error if it caught one} });
取消订阅 unsubscribe()
由于可观察对象的执行可能是无限的(不停地next),而对于观察者来说却往往希望在有限的时间内终止执行,因此我们需要一个API来取消执行。
var observable = Rx.Observable.from([10, 20, 30]);var subscription = observable.subscribe(x => console.log(x));// Later:subscription.unsubscribe();
在你订阅了之后,你将会得到一个Subscription对象,它表示正在进行的执行。大胆的去使用unsubscribe()去终止执行吧。
observer观察者
什么是观察者?观察者是可观察对象所发送数据的消费者,观察者简单而言是一组回调函数 , 分别对应一种被可观察对象发送的通知的类型:next, error和complete。下面是一个典型的观察者对象的例子:
var observer={next:x=>console.log('Observer got a next value: ' + x),error: err => console.error('Observer got an error: ' + err),complete: () => console.log('Observer got a complete notification') }
观察者不过是三个回调函数组成的对象,每个回调函数分别对应可观察对象的通知类型。
Subscription订阅
订阅对象也可以被放置在一起,因此对一个订阅对象的unsubscribe()进行调用,可以对多个订阅进行取消。做法是:把一个订阅"加"进另一个订阅。
var observable1 = Rx.Observable.interval(400);var observable2 = Rx.Observable.interval(300);var subscription = observable1.subscribe(x => console.log('first: ' + x));var childSubscription = observable2.subscribe(x => console.log('second: ' + x)); subscription.add(childSubscription); setTimeout(() => {// Unsubscribes BOTH subscription and childSubscriptionsubscription.unsubscribe(); }, 1000);
执行之后,我们可以在控制台得到:
second: 0 first: 0 second: 1 first: 1 second: 2
订阅也有一个remove(otherSubscription)方法,用于解除被add添加的子订阅。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
相关阅读:
以上就是Rxjs的使用详解的详细内容,更多请关注php中文网其它相关文章!
已抢186495个
抢已抢67277个
抢已抢352974个
抢已抢667159个
抢已抢122292个
抢已抢23419个
抢