rxjs 的映射生活中的例子帮助理解

本文以NBA赛事直播为例,深入浅出地讲解了RxJS中Observable与Subject的概念及应用。通过创建直播数据流,展示了如何使用Observable进行单播推送,以及Subject实现的多播功能,让多个订阅者能同时接收直播信息。

1、Observable:可观察对象,就是一个某讯视频NBA赛事的文字直播,会有源源不断的实时信息推送(单播)

    //craete、of、from创建一个NBA赛事
    var observable = Observable.create(subscriber=>{
      subscriber.next('勇士队库里三分投进');
      subscriber.next('火箭队前场篮板');
      ……
      //直播过程中的故障
      //subscriber.error('网络断线')
      //比赛结束
      subscriber.complate();
    })

    //勇士球迷张三
    var zhangsan = {
      next:(x)=>{
        //观看腾讯体育推送的比赛实时信息
        console.log(x);
      },
      error:(err)=>{
        console.log(`窝草居然${err}`);
      },
      complate:()=>{
        console.log('今年总冠军又是勇士了');
      }
    }
    //火箭队球迷李四
    var lisi = {
      next:(x)=>{
        //观看腾讯体育推送的比赛实时信息
        console.log(x);
      },
      error:(err)=>{
        console.log(`窝草居然${err}`);
      },
      complate:()=>{
        console.log('看来季后赛悬了');
      }
    }
    //公众号会逐一推送信息给每一个订阅的用户(单播)
    //zhansan订阅了腾讯体育的文字直播
    observable.subscribe(zhangsan);
    //lisi订阅了腾讯体育的文字直播
    observable.subscribe(lisi);
复制代码

2、Subject:主体,可以是Observable,也可以是Observer(多播)

    //赛事播放的公共载体,比例(球迷酒吧的大幕上同步播放NBA赛事的直播)
    var subject = new Subject();
    var zhangsan = {
      next:(x)=>{
        //观看腾讯体育推送的比赛实时信息
        console.log(x);
      },
      error:(err)=>{
        console.log(`窝草居然${err}`);
      },
      complate:()=>{
        console.log('今年总冠军又是勇士了');
      }
    }
    //火箭队球迷李四
    var lisi = {
      next:(x)=>{
        //观看腾讯体育推送的比赛实时信息
        console.log(x);
      },
      error:(err)=>{
        console.log(`窝草居然${err}`);
      },
      complate:()=>{
        console.log('看来季后赛悬了');
      }
    }
    var wanger = {
      next:(x)=>{
        //观看腾讯体育推送的比赛实时信息
        console.log(x);
      },
      error:(err)=>{
        console.log(`窝草居然${err}`);
      },
      complate:()=>{
        console.log();
      }
    }
    //张三订了某酒吧的票
    let zsSubscription = subject.subscribe(zhangsan);
    //李四订了某酒吧的票
    let liSubscription = subject.subscribe(lisi);
    //王二订了某酒吧的票
    let weSubscription = subject.subscribe(wanger);
    //王二突然有事退票了
    weSubscription.unsubscribe();
    var observable = Observable.create(subscriber=>{
      subscriber.next('勇士队库里三分投进');
      subscriber.next('火箭队前场篮板');
      //直播过程中的故障
      //subscriber.error('停电了')
      //比赛结束
      subscriber.complete('勇士赢了');
    })
    //酒吧订阅了2019/4/8的直播赛事,球迷通过酒吧大屏共同观看,大屏通过多播给球迷
    observable.subscribe(subject);
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值