使用Kovenant将自定义错误类型链接到Promise

时间:2017-06-07 21:59:43

标签: kotlin kovenant

我正在使用Retrofit访问REST API,我想使用Kovenant的then函数链接几个工作单元。换句话说,我想将一个API调用的输出作为参数提供给另一个API调用。

我已经定义了一个自定义错误类型,其中包含一个属性,用于包含如下定义的API特定错误代码:

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

如果在API调用期间发生错误,则会使用相应的错误代码创建此类的实例。

根据Kovenant的文档,我可以创建一个Deferred<V, E>的实例来获取Promise<V, E>。我希望我可以为通用参数ApiError提供E。我没有看到Kovenant对Deferred的定义中的任何通用约束似乎要求EException

话虽这么说,当我尝试使用Promise<V, ApiError>链接两个返回then的函数时,我收到一个编译错误,指出then的预期类型是{{1} }。

我可以让Kovenant使用自定义错误类型吗?如果没有,是否继承Exception以包含属性我需要正确的解决方案来实现我想要实现的目标?

1 个答案:

答案 0 :(得分:1)

某些基本定义没有 <div class="row setup-content" id="step-1"> <div class="col-xs-6 col-md-offset-3"> <div class="col-md-12"> <h3> Step 1</h3> <label><input type="radio" class="message_pri" id="web" name="web" value="Web">Web</label> <label><input type="radio" class="message_pri" id="mobile" name="web" value="Mobile">Mobile</label> <button class="btn btn-primary nextBtn btn-lg pull-right btnnext" type="button" >Next</button> </div> 的通用边界,但几乎所有扩展函数都表明E的类型为E。在Kovenant promises-api.kt中查看源代码表明很明显大多数事情都有这种期望。

您只需将错误类更改为Exception的后代:

即可
Exception

然后您可以将其丢弃以使class ApiError(val statusCode: Int, val apiErrorCode: Int, message: String) : Exception(message) 失败,或者使用它来Promise调用失败。