首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检查Twilio.Device处理程序是否已经存在

如何检查Twilio.Device处理程序是否已经存在
EN

Stack Overflow用户
提问于 2016-08-30 11:48:24
回答 2查看 1.3K关注 0票数 3

我在使用Twilio的角度应用程序。每当用户访问某个页面(让我们称之为customer页面)时,我都在初始化Twilio设备,以便用户可以调用特定的客户。在customer控制器中调用此初始化函数:

代码语言:javascript
运行
AI代码解释
复制
function _initializeDevice(token, connectHandler, disconnectHandler) {
    console.log('CALLED INITIALIZE DEVICE');
    var device = Twilio.Device;
    device.setup(token, {debug: true});
    console.log(device);

    device.connect(connectHandler);
    device.disconnect(disconnectHandler);

    device.offline(function() {
        _getToken().then(function(result) {
            device.setup(result.data.token, {debug: true});
        });
    });

    device.error(_handleTwilioError);
}

这是上面传递的断开处理程序:

代码语言:javascript
运行
AI代码解释
复制
function onDisconnect() {
    console.log('SAVING CALL');
    // code to save call
}

问题是,每当用户离开客户页面并返回时(而不刷新页面),客户控制器就会再次运行,导致_initializeDevice函数也再次运行。多个连接/断开/其他处理程序最终被注册到同一个设备上,这会导致应该只运行一次的事情多次运行。

这里有一个我的控制台日志样本来说明这个问题..。

所以,当我第一次访问客户页面并第一次调用_initializeDevice时,会发生什么:

代码语言:javascript
运行
AI代码解释
复制
CALLED INITIALIZE DEVICE
[Device] Setting up PStream
[WSTransport] Opening socket
[WSTransport] attempting to connect
[WSTransport] Socket opened
[PStream] Setting token and publishing listen
[Device] Stream is ready
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
[Twilio.PeerConnection] signalingState is "have-local-offer"
[Twilio.PeerConnection] signalingState is "stable"
[Twilio.PeerConnection] iceConnectionState is "checking"
[Twilio.PeerConnection] iceConnectionState is "connected"
[Twilio.PeerConnection] iceConnectionState is "completed"
[Connection] Disconnecting...
[Twilio.PeerConnection] iceConnectionState is "closed"
[Twilio.PeerConnection] signalingState is "closed"
SAVING CALL

然后,我一次又一次地从customer页面导航回来,而不需要刷新,因此控制器再次运行初始化代码并复制处理程序:

代码语言:javascript
运行
AI代码解释
复制
CALLED INITIALIZE DEVICE
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
CALLED INITIALIZE DEVICE
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
[Twilio.PeerConnection] signalingState is "have-local-offer"
[Twilio.PeerConnection] signalingState is "stable"
[Twilio.PeerConnection] iceConnectionState is "checking"
[Twilio.PeerConnection] iceConnectionState is "connected"
[Twilio.PeerConnection] iceConnectionState is "completed"
[Connection] Received HANGUP from gateway
[Connection] Disconnecting...
[Twilio.PeerConnection] iceConnectionState is "closed"
[Twilio.PeerConnection] signalingState is "closed"
SAVING CALL
SAVING CALL
SAVING CALL

我试过使用Twilio.Device.destroy(),但处理程序仍然存在。

如何检查处理程序是否已经连接到Twilio设备上?或者,我应该在我的角度应用程序中的其他地方附加事件处理程序吗?

编辑:作为参考,下面是我如何断开呼叫(附在一个按钮上):

代码语言:javascript
运行
AI代码解释
复制
function hangUp() {
    Twilio.Device.disconnectAll();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-31 13:34:32

Twilio.Device目前不支持取消注册侦听器.似乎这是因为它的独生子女行为。这种情况在将来可能会改变,但现在您可以直接对绑定的每个事件使用以下方法删除侦听器:

代码语言:javascript
运行
AI代码解释
复制
Twilio.Device.instance.removeListener('eventName', handlerFn);

注意不要使用removeAllListeners,因为Device实例正在侦听它自己的一些事件。

票数 4
EN

Stack Overflow用户

发布于 2016-08-30 13:03:57

如果您调用Twilio.Device.destroy()时,您的处理程序没有未注册,您可能会遇到令牌过期问题,因为您需要在调用Device.destroy()之后用新令牌调用Device.destroy(),以便再次使用设备。

另一种确保连接终止的方法是调用Twilio.Device.disconnectAll();。也许您的处理程序函数实际上并没有处理终止。

请告诉我如何在您签入您的令牌设置,并提供任何相关的日志信息,将帮助我更清楚地看到问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39235950

复制
相关文章
Javascript中对象如何检查key(键)是否存在
如果要特别测试对象实例的属性(而不是继承的属性),请使用hasOwnProperty:
IT工作者
2022/02/09
27K0
python 检查是否存在ddos攻击
import dpkt import socket import optparse
用户5760343
2019/07/31
3.8K0
python 检查是否存在ddos攻击
Node.js中如何检查是否存在某个目录
Node.js fs本地模块提供了几种有用的方法,可用于处理目录。 检查Node.js中是否存在某个目录的最简单方法是使用fs.existsSync()方法。
ccf19881030
2020/10/29
12.1K0
Kettle之“检查表是否存在”
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53884107
用户1148526
2019/05/25
3.9K0
mysql创建数据表时如何判断是否已经存在?
>>> create table if not exists people(name text,age int(2),gender char(1)); 如上代码表示创建一个名为people的数据表。有时在程序中,如果people这个表已经存在,如果执行下面的语句就会报错 >>> create table people(name text,age int(2),gender char(1)); if not exists 的作用就是判断要创建的数据表是否已经存在,若不存在则创建,否则跳过该语句。 pymy
marsggbo
2018/01/23
3.9K0
在bash脚本中如何检查一个命令是否存在
避免使用 which。它是一个外部进程,相对而言 hash、type 或 command 这样的内置程序执行效率更高,你还可以依靠内置程序来实际执行所需的操作,而且外部命令的效果很容易因系统而异。
程序熵
2023/09/25
5720
在bash脚本中如何检查一个命令是否存在
SonarQube检查项目中是否存在秘钥信息
持续集成和交付(CI / CD)管道旨在支持每天数以万计的部署。生产部署的频率不能以牺牲安全为代价,安全流程也需要与CI / CD管道集成在一起。这就是为什么我们在从开发到生产的流水线的每个步骤中都添加了持续的安全验证,以帮助确保我们的应用程序始终是安全的。
DevOps云学堂
2021/04/23
2.3K0
使用 shell(bash) 来检查 git 分支是否存在
不多说,直接上代码 localBranch=$(git branch|awk '{print $2}') if [ -n "localBranch" ]; then echo "存在该分支,并不进行创建" else echo "该分支不存在" fi
用户2353021
2020/05/11
3.6K0
检查自己的代码是否存在内存泄露
造成内存泄露的根本原因就是我们写的代码中存在某些对象长期占用内存,得不到释放,且这个对象占用的内存会逐步增加,导致 v8 无法回收,从而造成的服务的异常和不稳定,甚至是服务的中断和崩溃。
zz_jesse
2020/03/17
3K0
hive 处理已经存在的小文件方案
归档,archive。Hive 具有内置支持,可将现有分区中的文件转换为 Hadoop 存档(HAR),这样一个曾经由 100 个文件组成的分区只能占用约 3 个文件(取决于设置)。
王旭平
2023/03/24
8.8K0
c# WinFo判断当前程序是否已经启动或存在的几种方式
第一种方式:利用Mutex互斥量实现同时只有一个进程实例在运行 static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Applica
纯粹是糖
2018/04/16
1.3K0
PHP检查对象或类中是否存在属性
$obj = \app\common\library\Email::instance(); $obj->p=889; if(isset($obj->p)){ echo 66; }else{ echo 99; } die; isset既可以判断对象的属性是否存在,也可以判断数组的键名是否存在 未经允许不得转载:肥猫博客 » PHP检查对象或类中是否存在属性
超级小可爱
2023/02/20
4.3K0
VBA应用技巧:检查文件夹是否已存在
在使用VBA操作文件时,如果不先核实要操作的文件夹是否已存在,则有可能会导致代码出错。例如,在创建文件夹时、在到指定的文件夹中获取文件时。因此,我们需要先使用代码判断是否已存在相应的文件夹。
fanjy
2022/11/16
4.1K0
生成ssh key1 检查是否已经存在ssh key2 生成key3 git clone
1 检查是否已经存在ssh key 通常sshkey会默认生成在用户家目录下,所以查看家目录下是否存在.ssh 文件夹,以及是否存在相关目录就行。(~/.ssh/id_rsa) 2 生成key 在git bash中输入 ssh-keygen -t rsa -C "你的邮箱地址" 控制台输出如下: Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Shusheng Shi/.ssh/id_
JavaEdge
2018/05/16
1.1K0
LeetCode 1346. 检查整数及其两倍数是否存在
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
村雨遥
2020/05/06
1.6K0
CA2100:检查 SQL 查询是否存在安全漏洞
一种方法使用按该方法的字符串参数生成的字符串设置 System.Data.IDbCommand.CommandText 属性。
用户4268038
2022/02/20
1.8K0
检查整数及其两倍数是否存在 python3
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
SingYi
2022/07/14
1.4K0
检查整数及其两倍数是否存在 python3
如何使用sqlite3如何判断一个表是否在数据库中已经存在?
新版的EasyNVR默认都是使用的sqlite数据库,sqlite数据库占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,并且能够支持Windows/Linux/Unix等主流的操作系统,同时能够跟很多程序语言相结合。
TSINGSEE青犀视频
2021/02/07
7.4K0
LeetCode 1391. 检查网格中是否存在有效路径(BFS)
给你一个 m x n 的网格 grid。网格里的每个单元都代表一条街道。grid[i][j] 的街道可以是:
Michael阿明
2020/07/13
5K0
点击加载更多

相似问题

如何检查节点是否已经存在

10

如何检查数据是否已经存在?

11

如何检查值是否已经存在

30

如何检查DAG是否已经存在?

26

如何检查用户是否已经存在?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档