首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >承诺处理错误

承诺处理错误
EN

Stack Overflow用户
提问于 2017-10-05 19:08:37
回答 1查看 40关注 0票数 0

如何处理自己生成的错误以及Javascript承诺中的库/未处理异常?我所面临的问题是由承诺的catch()方法的“全捕获”特性产生的。

例如,我有以下代码:

代码语言:javascript
复制
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()链中,很多事情都可能出错,外部库可能抛出异常等等。例如,当这种情况发生时,我想打印“泛型错误”。

但我也希望验证代码并尽早退出(就像我在示例中所做的那样),在本例中,我实际上打印了自己的消息“我自己的错误”。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-05 19:16:27

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

代码语言:javascript
复制
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模式(即,它有一个名称和一个消息):

代码语言:javascript
复制
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');
    }
  });

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46593100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档