00:00
哈喽,大家好,这个小节呢,我们来实现一下这个订阅的取消,比方说在这呢,你订阅了一个频道,嘿,啊,我们可以呢,单独去取消这次订阅,而下边这个订阅是不受影响的。那如何来做呢?就可以根据这个唯一的编号啊,去进行一个取消,在上一个。呃,小节当中,我们实现订阅频道时呢,有一个这样的唯一的ID啊,我们可以将这个ID呢做一个返回值。返回。这个频道订阅的。的ID。我们把这个呢返回,这样一来呢,它是可以把它接到的,接收一下啊,这个ID啊,我们写一个PID吧。然后这块我们再来介绍一下。PID等于。那这个的话呢,我们就可以把这个唯一的编号拿到,拿到之后。先看结果怎么样。好在这里。
01:01
输出唯一的ID。RL log,打印一下PIDPID2。保存。好,点开浏览器创新页面,看这TOKEN1TOKEN2没有问题,那下边的话,我们就可以根据这个TOKEN1TON2来取消某一个订阅了。取消。订阅。取消订阅的话,我们这里其实功能还是比较多的啊,不光能够取消单个的订阅,而且还可以把频道整个呢取消掉。啊,甚至说我们可以把所有的频道全部取消掉,这里有三种情况。然后呢,我们把它这个呢,说明拿过来。诶。然后放到这边来。如果说没有传值。啊,如果说这块没有传值的话,那就是直接把所有的全部都取消掉,如果说传的是token,那就直接把其中的某一个订阅取消掉,如果说你传的是一个频道名啊。
02:00
比如说你传的是个配,那我就把配当中所有的电源全部都取消掉,所以说呢,分这么三种情况,那好,那我们开始先把结构答一下吧。怎么个取消法?写一下取消订阅啊。b.on subscribe。然后括弧。比方说现在我们传一个token_一啊,Sorry,应该写字符串啊,Token_一当然也可以写PID。都可以。那这样的话呢,如果说我们再去。执行这个。消息发布的话,那第一个。这个订阅将不会去执行啊。最终效果是这样的,那好,接下来我们开始在这里去写一下这个方法。拿过来,然后等于一个function。他呢接受一个参数啊,这个参数的话,我们就写一个flag。因为它可能是一个频道名,也可能是一个订阅ID,也可能他什么也没有传,所以说写一个flag作为标志。
03:05
那如果。啊,这个flag。没有传递啊,如果flag为unDeFined,没有传。则清空所有电源。大家可以看一下啊,如果flag。要是等于一个的话。啊,清空所有电源,那么怎么样来清空所有电源呢?那就是把call back清空。我们就可以这样来做this.call bag等于一个括括号。啊,这是第一种情况啊,那下面的话还有就是字符串的情况啊,Else if,如果。Type of flag是等于一个string。啊,如果说是一个字符串的话。那我们该怎么办?嘿,如果说是一个字符串的话,我们就要想办法去判断一下这个字符串到底是一个。
04:00
定位的VID还是一个频道的名字。好了,我们怎么来判断一下这个字符串到底是不是一个订阅ID呢?啊这里啊,我们因为订阅ID都是token下划线开头的,所以说这里可以先判断一下。判断是否为。Token下划线开头。怎么来判断呢?可以这样来判断,如果flag.index of括弧。Token下划线。他如果说呢。呃,要是等于一个负一。说啊,不应该负一,应该等于个零。啊,因为等于零的话,就是表示它是。以这个字符串开头的。如果说是。啊,如果是就表明是一个。订阅ID。那如果说不是呢啊,如果不是的话,那就表明。是一个频道的名称。
05:00
如果说他是一个频道名称啊,比方说他把配给我们串联进来,举个例子。他把配传进来,把配传进来的话,就是配当中所有的回调全都没有了。所以在这里我们需要把配这个属性删掉。怎么来删掉呢?就是delete this.call back。大家少个S啊,这块加个S,然后呢,下边把flag串进来。现在的话呢。配这个属性在call back中就不存在了。那如果说是一个ID呢。啊,假如说他这块传的是一个TOKEN1啊token。下滑一,那我们就应把TOKEN1这个属性。得先找到。为什么要先找他呢?因为大家可以想象一下啊,在这个结构当中,它不光只有配,它还可能有别的,比如说cancel。当然还包括其他的,比如说other。
06:02
这里边儿可能是要TOKEN3,然后TOKEN4。下边的话可能也是有token,然后十等等。你怎么样做去能够找到这个TOKEN1呢?对啊,这是一个问题,所以这个时候我们可以怎么办,咱们可以呢,去做一个便利。首先,先把。回调当中所有的值先取掉。啊,就是把calls当中所有的值咱们先去掉。来看一下,就是object.values括弧this.call back。大家想象一下啊,这样一来,如果说我要对他去做一个便利的话。啊,做便利的话,每一个元素是不是就这个对象了。就是其中某一个对象好,然后我们再去做一个筛选。在这些对象当中。去寻找一个拥有TOKEN1的那个对象。
07:02
注意啊,在数组当中,因为values返回结果是一个数组。啊,然后呢,元素的话是这三个。我们要在这三个元素当中去寻找一个下标有TOKEN1的。啊,那个对象。所以在这我们可以用谁来做呢?用这个find来做去寻找一下。Obj OBj.has on property。得有谁呀,得有TON1。但是偷个一啊,咱不能写死,因为写死的话呢,就没有办法去检测检测其他频道了。检测其他这个ID的,所以说我们这应该是。啊,把flag放进来。放下来之后,咱们把它拿到啊,Let。这个是。OB等于它。那这个call back obj是谁呢?其实就是这其中的某一个对象。拥有token_一的那个对象。
08:00
但是他有没有这个不是实时未知的啊,如果说有的话啊,它就是那个对象,如果没有的话,就是那。所以这块我们应该做一个判断啊,看看有没有如果call back。然后OB。要是有怎么办呢?有的话,咱就应该把这个TO1给它删掉。怎么删呢,Delete。然后呢,Call back obj下标。Flag。这样的话,我们就可以把它删掉了。好了,那功能代码这一块就已经完成了啊,完成之后咱们一起来做一个测试。首先。我呢,先什么也不传。看看结果怎么样,看看里边还有没有回调。然后呢,打开浏览器测一下。他写一面。呃,当然在这块我们上边好多东西呢,都没有清,咱得先清一下啊。调查。右键刷新。这里的on subscribe is not affection第34行。
09:00
34行。啊,因为咱们这没有改名字。把名字改一下。切过来右键刷新。点开大家一起来看一看,你会你会发现这个call已经是清空了。啊,没有东西了,好了,这个没有问题,那么下边的话,咱们再来把这个谁传进来,把这个配传进来。啊,把配传进来这块呢,订阅了两个频道啊,一个是配啊,一个呢是cancel。我们把配删一删。刷新页面,然后点开call back,你可以看到pay没有了,但是cancel还有。没有问题。下边的话再来试一下。是谁呢?是这个token。下划线二。先把它呢去掉,看行不行,刷新页面,然后点开。点开大家可以观察这个配啊,你会发现TOKEN1还有,但是TON2已经没有了。啊,已经没有了,没有问题了,所以做了这三个测试呢,发现它都是好使的啊。发现好使之后,咱们顺便把代码来运行一下。
10:02
在这种情况下的话。这个它是不会运行的,因为被咱们已经已经给取消掉了啊,所以第一个呢,它会执行。啊,它会输出切过来右键刷新。看这商家接到了ID啊。没有问题。好了,那么到这儿的话,关于这个消息订阅取消订阅这一块,我们就已经是完成了。
我来说两句