Javascript 承诺只是为了成功?

Javascript 承诺只是为了成功?,javascript,error-handling,promise,Javascript,Error Handling,Promise,我正在用JavaScript编写一个简单的RESTAPI,我想知道在使用承诺和解析/拒绝机制时,最好的方法是什么 起初,我想做出如下承诺: MyApi.getSomeData() .then(responseSuccess => console.log(responseSuccess)) .catch(responseError => console.log(responseError) 其中success表示我们从服务器获得了,即code200和一些数据,但错

我正在用JavaScript编写一个简单的RESTAPI,我想知道在使用承诺和解析/拒绝机制时,最好的方法是什么

起初,我想做出如下承诺:

MyApi.getSomeData()
     .then(responseSuccess => console.log(responseSuccess))
     .catch(responseError => console.log(responseError)
其中
success
表示我们从服务器获得了,即code
200
和一些数据,但错误表示我们从服务器获得了
404
。我想确保将使用API方法的最终用户能够保证他将获得特定对象的错误(catch)

但是,如果承诺在内部某处抛出了一些异常(一些运行时错误或类似的错误),该怎么办?然后承诺将被拒绝,并出现此
错误
,而不是我的responseError结构


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

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
}

你也可以在一个公共的地方抽象这个逻辑,这样你就可以重用它。

在这种情况下,什么是最好的方法?
-这真的取决于我一直在思考的问题,但我想从使用的角度讲清楚它。所以最终用户不需要检查catch块中的错误类型。如果promises有
.then().catch().exception()
类型,可能会更简单。没有真正的方法可以避免类型检查,因为我们只有2种输出类型(
then
catch
)和3种情况(
成功
失败
运行时执行选项