如何在 jquery.terminal 中使用 exceptionHandler

how do i use exceptionHandler in jquery.terminal

提问人:Severus 提问时间:4/17/2023 最后编辑:jcubicSeverus 更新时间:4/17/2023 访问量:65

问:

我正在jquery终端中使用不同的api做一些事情,但是,如果用户犯了错误,错误消息如下所示

my code which uses github 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 jQuery ajax 错误处理 jquery-terminal

评论


答:

1赞 perona chan 4/17/2023 #1

JavaScript 仍然需要代码来等待数据请求的结果。 浏览器中提供了代码来替换 jQueryasyncawaitfetch

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");
};
1赞 jcubic 4/17/2023 #2

这个例外很好,因为你可以很容易地找到错误发生的位置,但如果你想隐藏它,那么你可以选择只用于此。但请注意,如果您有 Promise,则需要将其退回,否则终端将不会看到该 Promise 被拒绝。exceptionHandler

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] 表示这是内部错误,但这只是来自拒绝 promise 的用户错误。

评论

0赞 Severus 4/18/2023
如果用户在第一个代码中没有出错,但在第二个代码中出错,则忽略错误,并且第一个数据显示如下(files.catbox.moe/7pyrz2.jpeg)
0赞 jcubic 4/19/2023
@Severus哪一秒?您的问题中只有一个代码。我的演示有两个示例,并且都可以工作。我已经明确写道,如果你不这样做,你需要从解释器返回一个承诺,图书馆将不知道有被拒绝的承诺。这就像在终端之外抛出一个错误。你能展示你的代码吗?没有看到你的代码,我什么也帮不上忙。