如何在jquery.terminal中使用exceptionHandler

jw5wzhpr  于 2023-04-20  发布在  jQuery
关注(0)|答案(2)|浏览(98)

我在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');
},

我的问题是如何在可能的错误中发送小消息。

vmdwslir

vmdwslir1#

这个异常很好,因为你可以很容易地找到错误发生的地方,但是如果你想隐藏它,你可以使用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]意味着这是一个内部错误,但这是一个用户错误,只是来自一个被拒绝的promise。

ldioqlga

ldioqlga2#

javascript仍然需要asyncawait代码来等待数据请求的结果。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");
};

相关问题