如何处理自己产生的错误以及Javascript Promise中的库/未处理的异常?我所面临的问题是由Promise的catch()方法的“包罗万象”性质引起的。

例如,我有以下代码:

somePromiseFunction()
.then(result => {
    // External library or behaviour
    someCodeThatCanThrowExceptions()

    if (result.code === 1) {
        throw 'My own exception'
    }
})
.catch(err => {
    // how do I know if this is an exception I don't know or something
    // that I do want to actually handle?
});


then()链中很多事情可能出错,外部库可能引发异常等。例如,当发生这种情况时,我想打印“ Generic error”。

但是我也想验证代码并尽早退出(就像我在示例中所做的那样),在这种情况下,实际上打印我自己的消息“我自己的错误”。

如何处理我的“提前退出” throw和代码执行过程中可能出错的所有不同东西?

最佳答案

在您的特定情况下,您将引发一个简单的字符串异常,因此您必须查看该值。

function go() {
  return new Promise(function(resolve, reject) {
    throw 'My Exception';
  });
}

const x = go()
  .then(function() {

  })
  .catch(function(ex) {
    if (ex === 'My Exception') {
      alert('It was mine');
    }
  });


如果创建更多专门的异常,则可以测试类型,而不是确切的字符串。以下是一个示例,该示例遵循可以被类型测试的window.Error模式(即,它具有名称和消息):

var MyError = (function() {
  function MyError(message) {
    this.message = message;
    this.name = 'MyError';
  }
  return MyError;
}());

function go() {
  return new Promise(function(resolve, reject) {
    throw new MyError('Something went wrong');
  });
}

const x = go()
  .then(function() {

  })
  .catch(function(ex) {
    if (ex instanceof MyError) {
      alert('It was mine');
    }
  });


这样做的好处是可以将您的消息从测试中分离出来,以确定是否是您的错误。

关于javascript - promise 处理的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46593100/

10-16 23:12