如何在 jquery.terminal 中使用 exceptionHandler

问题描述 投票:0回答:3

我在 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 error-handling jquery-terminal
3个回答
0
投票

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");
};

0
投票

要在 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 并设置变量 bc、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 调用期间发生的错误并向用户显示信息性错误消息。


0
投票

异常很好,因为您可以轻松找到错误发生的位置,但如果您想隐藏它,那么您可以使用

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

© www.soinside.com 2019 - 2024. All rights reserved.