rxjs5.X系列 —— ErrorHandling/Condition/Mathematical系列 api 笔记

欢迎指导与讨论 : )

    

  前言

    本文是笔者翻译 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

 

posted @ 2017-01-12 12:00  BestMe丶  阅读(984)  评论(0编辑  收藏  举报