zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ArcGIS添加鹰眼
    C#设计模式--工厂方法
    C#设计模式--简单工厂
    C# 单例模式(转)
    事务的 原子性、一致性、隔离性、持久性
    asp.net 常用的3中身份验证
    angular localStorage使用方法
    angular.js升序降序过滤器
    ionic中$ionicPopover和$ionicModal
    ionic的弹出框$ionicPopover
  • 原文地址:https://www.cnblogs.com/BestMePeng/p/rxjs_learn_errorhandling.html
Copyright © 2011-2022 走看看