我在 jquery 终端中使用不同的 api 做一些事情但是,如果用户犯了错误,错误消息看起来像这样
代码:
gemini: function(a){
$.ajaxSetup({async: false});
$.get('https://api.github.com/repos/'+a, function(x){
b = x.name;
c = x.id;
d = x.license.name;
e = x.svn_url;
});
this.echo('name: '+b);
this.echo('id: '+c);
this.echo('license: '+d)
this.echo('.zip: '+e+'/archive/master.zip');
},
我的问题是如何在可能的错误中发送一条小消息
javascript 还需要
async
await
代码等待数据请求的结果。 fetch
代码在浏览器中可用以替换 jquery
var gemini = async (a) => {
var x = await fetch("https://api.github.com/repos/" + a);
var b = x.name;
var c = x.id;
var d = x.license.name;
var e = x.svn_url;
this.echo("name: " + b);
this.echo("id: " + c);
this.echo("license: " + d);
this.echo(".zip: " + e + "/archive/master.zip");
};
要在 jQuery.terminal 中的 gemini 函数出错时发送一条小消息,您可以在可能引发错误的代码周围添加一个 try-catch 块,并使用 exceptionHandler 选项显示错误消息给用户。
这是带有 try-catch 块和 exceptionHandler 函数的 gemini 函数的更新版本:
gemini: function(a){
try {
$.ajaxSetup({async: false});
$.get('https://api.github.com/repos/'+a, function(x){
b = x.name;
c = x.id;
d = x.license.name;
e = x.svn_url;
});
this.echo('name: '+b);
this.echo('id: '+c);
this.echo('license: '+d)
this.echo('.zip: '+e+'/archive/master.zip');
} catch (error) {
this.exceptionHandler(error);
}
},
在此更新版本中,我们在调用 API 并设置变量 b、c、d 和 e 的代码周围添加了一个 try-catch 块。如果在这个块中抛出一个错误,它将被捕获并且 exceptionHandler 函数将以错误对象作为参数被调用。
我们还在 jQuery.terminal 构造函数中定义了一个 exceptionHandler 函数作为一个选项。每当 gemini 函数中抛出错误时,都会以错误对象作为参数调用此函数。
这是一个示例,说明如何定义 exceptionHandler 函数以向用户显示错误消息:
$(document).ready(function() {
$('#terminal').terminal(function(command) {
// Your terminal command code here
}, {
greetings: 'Welcome to the terminal',
exceptionHandler: function(error) {
this.error('Oops! An error occurred: ' + error.message);
this.echo('Please check your input and try again.');
}
});
});
在这个例子中,我们使用 this.error 方法通过错误对象的 error.message 属性向用户显示错误消息。我们还使用 this.echo 方法来显示一条通用消息,指示用户检查他们的输入并重试。
通过向 gemini 函数添加一个 try-catch 块和一个 exceptionHandler 函数,您可以处理 API 调用期间发生的错误并向用户显示信息性错误消息。
异常很好,因为您可以轻松找到错误发生的位置,但如果您想隐藏它,那么您可以使用
exceptionHandler
选项。但请注意,如果你有一个 Promise,你需要返回它,否则终端将不会看到该 promise 被拒绝。
const term = $('body').terminal(function(command) {
if (command === 'foo') {
this.echo(x);
} else if (command === 'bar') {
return async_function().then(() => {
this.echo(x);
});
}
}, {
exceptionHandler: function(e) {
this.error(e.message);
}
});
term.exec('foo');
term.exec('bar');
function async_function() {
return Promise.resolve();
}
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css"/>
</head>
<body>
</body>
</html>
而且好像标签不对,[Command] 表示这是一个内部错误,但它只是来自被拒绝的承诺的用户错误。