链接承诺自定义错误类型与Kovenant
我正在使用Retrofit来访问一个REST API,我想用Kovenant的函数来链接几个工作单元。 换句话说,我想将一个API调用的输出作为参数提供给另一个API调用。
我已经定义了一个自定义的错误类型,它包含一个属性来包含API特定的错误代码,定义如下:
class ApiError(val statusCode: Int, val apiErrorCode: Int, val message: String)
如果在API调用期间发生错误,则使用适当的错误代码创建此类的实例。
根据Kovenant的文档,我可以创建一个Deferred<V, E>
的实例来获得Promise<V, E>
。 我希望我可以提供泛型参数E
ApiError
。 我没有看到Kovenant的Deferred
定义中的任何通用约束,似乎要求E
是一个Exception
。
这就是说,当我试图链接两个函数返回Promise<V, ApiError>
使用, then
我收到一个编译器错误,说明预期的类型, then
是Promise<V, Exception>
。
我可以使Kovenant工作与自定义错误类型,如果不是,是否继承异常包括属性我需要正确的解决方案,我试图实现?
一些基本定义没有E
泛型边界,但是几乎所有的扩展函数都确实表明E
是Exception
类型的。 在Kovenant promises-api.kt中查看源代码显示,很显然,大多数事情都有这个期望。
您可以简单地将错误类更改为Exception
的后代:
class ApiError(val statusCode: Int, val apiErrorCode: Int, message: String) : Exception(message)
然后,您可以抛出它以失败Promise
或使用它在Deferred
调用失败。