承诺只为成功而决心?

时间:2017-05-11 05:54:40

标签: javascript error-handling promise

我正在用JavaScript编写一个简单的REST API,我想知道在使用Promise和解析/拒绝机制时最好的方法。

起初我想签署承诺签名:

MyApi.getSomeData()
     .then(responseSuccess => console.log(responseSuccess))
     .catch(responseError => console.log(responseError)

其中success表示我们得到了代码200并且有一些数据,但错误意味着我们从服务器获得404。我想确保将使用API​​方法的最终用户将保证错误(catch)他将获得特定对象。

但是如果promise在某个地方抛出一些异常(某些运行时错误或其他一些错误)怎么办?然后使用此Error而不是我的responseError结构拒绝承诺。

在这些情况下,最好的方法是什么?如何区分操作成功,操作失败(但故意,即404代码)和操作意外错误?

1 个答案:

答案 0 :(得分:0)

promise中的运行时错误将触发catch块。没有避免这种情况。但是,您可以通过检查错误的主体来区分运行时错误和网络错误。所以假设

responseError = {
  type: 'NETWORK_ERROR', 
  status: 400, 
  message: 'Invalid input'
}

if (responseError.type === 'NETWORK_ERROR') {
  // Network error code here
} else {
  // All other types of errors
}

您也可以在一个公共场所抽象这个逻辑,以便重复使用它。