Javascript 承诺只是为了成功?
我正在用JavaScript编写一个简单的RESTAPI,我想知道在使用承诺和解析/拒绝机制时,最好的方法是什么 起初,我想做出如下承诺: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和一些数据,但错
MyApi.getSomeData()
.then(responseSuccess => console.log(responseSuccess))
.catch(responseError => console.log(responseError)
其中success
表示我们从服务器获得了,即code200
和一些数据,但错误表示我们从服务器获得了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种情况(成功
,失败
,运行时执行选项
)