gpt4 book ai didi

javascript - 在onError事件中捕获javascript异常(webkit语音识别)

转载 作者:行者123 更新时间:2023-11-28 07:51:42 25 4
gpt4 key购买 nike

遵循 code of the Webkit Speech Recognition (请参阅源代码),我想在开始执行其他操作时(例如,当您拒绝浏览器使用麦克风时)捕获错误。

问题是...我不知道如何捕获这个错误之王。

最终目标是将错误消息传递给尝试启动 Webkit 语音识别的对象。因此,如果您有另一个(好的)解决方案来做到这一点。

我有这样的关系:

var anObject= {
recognizer : Recognizer,

listen : function() {
try{
this.recognizer.listen();
} catch (error) {
alert('I want to do something here with the error');
}
}
}


var Recognizer = {


listen: function()
{
var recognition = new webkitSpeechRecognition();
// recognition config

try{
recognition.start();
} catch (error) {
alert(error);
// I've also tried "throw error;" but we never pass in this catch
}

recognition.onerror = function(event) {
console.log(event.error); // this works

throw event.error; // the "exception" is thrown
}

// other functions
}
}

这不起作用,我不知道为什么。我收到“未捕获的异常”,因此抛出了异常,但未捕获。

感谢您的帮助。

最佳答案

您的两个示例代码都不起作用,因为 onerror 是异步调用的,并且没有被您的 catch 或条件语句捕获。

发生错误时调用的函数的上下文是 SpeechRecognition 对象,而不是您 try catch 它的对象...您最好的选择是从 onerror 函数中调用处理错误的对象。

这应该有效:

var Recognizer = {
listen: function()
{
var recognition = new webkitSpeechRecognition();

recognition.onerror = function(event) {
anObject.catchError(event);
}

recognition.start();
}
}

var anObject= {
recognizer : Recognizer,

listen : function() {
this.recognizer.listen();
},

catchError: function(event) {
switch (event.error) {
case 'network':
console.log('network error');
break;
case 'not-allowed':
case 'service-not-allowed':
console.log('permission denied by user or browser');
break;
}
}
}

anObject.listen();

没有自动方法来检测用户拒绝权限、浏览器拒绝权限甚至没有麦克风的用户之间的区别。

查看 annyang Speech Recognition library它使用一些额外的逻辑来找出错误的不同原因。它还解决了使用语音识别的所有其他令人头疼的问题,绕过了可能导致浏览器崩溃的潜在错误,并使语音识别的使用变得更加简单:https://www.talater.com/annyang/

关于javascript - 在onError事件中捕获javascript异常(webkit语音识别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com