链接承诺自定义错误类型与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我收到一个编译器错误,说明预期的类型, thenPromise<V, Exception>

我可以使Kovenant工作与自定义错误类型,如果不是,是否继承异常包括属性我需要正确的解决方案,我试图实现?

一些基本定义没有E泛型边界,但是几乎所有的扩展函数都确实表明EException类型的。 在Kovenant promises-api.kt中查看源代码显示,很显然,大多数事情都有这个期望。

您可以简单地将错误类更改为Exception的后代:

 class ApiError(val statusCode: Int, val apiErrorCode: Int, message: String) : Exception(message) 

然后,您可以抛出它以失败Promise或使用它在Deferred调用失败。