前言
本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第四篇 —— ErrorHanding异常处理、Condition Operator情况操作、Mathmatical数学操作。如有错漏,希望大家指出提醒O(∩_∩)O。更详细的资料尽在rxjs官网 【http://reactivex.io/rxjs/manual/overview.htm】与带有demo例子的网站【http://xgrommx.github.io/rx-book/content/observable】。
本文有关Error Handing操作的内容有:catch、retry、retryWhen
有关Condition操作的内容有:defaultIfEmpty、every、find、findIndex、isEmpty
有关Mathmatical操作的内容有:count、max、min、reduce
一、catch
捕抓当前Observable可能出现的错误,当源Observable出现异常时,会停止继续发射值。
let r$ = Rx.Observable.create(( observer) => {
observer.next( 1 );
observer.error( 'hello' );
observer.next( 2 );
}).catch( err => console.log( err ))
r$.subscribe( x => console.log( x ))
// 输出:1, 'hello'
// 不输出:2
二、retry
当源Observable抛出异常时,会重新执行源Observable,并且能够根据参数设置重新执行的次数。
let r$ = Rx.Observable.create(( observer) => {
observer.next( 1 );
observer.next( 2 );
observer.error( 'hello' );
}).retry( 2 )
r$.subscribe( x => console.log( x ))
// 先输出:1,2
// 再输出:1,2, 1,2 因为重新执行了2次
三、retryWhen
当满足条件值,不断重新执行源Observable
this.http.get( url,options ) .retryWhen(( errors ) => { return errors .mergeMap((error) => (error.status === 429) ? Observable.throw(error) : Observable.of(error)) .delay(1000) .take(2); }) .catch((res) => this.handleError(res)); // angular2 http例子
四、defaultIfEmpty
若Observable在结束时,还没有发射过任何值,则发射该操作的参数的值
Rx.Observable.empty( )
.defaultIfEmpty( 42 )
.subscribe( x => console.log( x ))
// 输出 42
五、every
若Observable所发射的每个值都符合条件,则返回 true,若不,则返回 false
Rx.Observable.of( 1, 2, 3, 4 )
.every( x => x < 5 )
.subscribe( x => console.log( x ))
// 输出:true
六、find
返回Observable所发射值的第一个符合条件的项
Rx.Observable.of( 1, 2, 3, 4, 5, 15 )
.find( x => x % 5 === 0 )
.subscribe( x => console.log( x ))
// 输出:5
七、findIndex
返回Observable所发射值的第一个符合条件的项的下标
Rx.Observable.of( 1, 2, 3, 4, 5 )
.findIndex( x => x % 5 === 0 )
.subscribe( x => console.log( x ))
// 输出:4
八、isEmpty
判断Observable是否为空,是则返回 true,否则返回 false
Rx.Observable.empty( )
.isEmpty( )
.subscribe( x => console.log( x ))
// 输出:true
九、count
当Observable停止发射值时,返回Observable已发射的项的个数
Rx.Observable.of( 1,2,3,4 )
.count( )
.subscribe( x => console.log( x ))
// 输出:4
十、max
当Observable停止发射值时,返回Observable已发射值的最大数值项的值
Rx.Observable.of( 1,2,100,3,4 )
.max( )
.subscribe( x => console.log( x ))
// 输出:100
十一、min
当Observable停止发射值时,返回Observable已发射值的最小数值项的值
Rx.Observable.of( 100,1,2,3,4 )
.min( )
.subscribe( x => console.log( x ))
// 输出:1
十二、reduce
对Observable所发射的序列,进行reduce叠加操作
Rx.Observable.of( 1,2,3,4,5 ) .reduce(( pre , cur) => pre + cur, 100) .subscribe( x => console.log( x )) // 输出:115