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);
复制代码