我正在使用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
的定义中的任何通用约束似乎要求E
为Exception
。
话虽这么说,当我尝试使用Promise<V, ApiError>
链接两个返回then
的函数时,我收到一个编译错误,指出then
的预期类型是{{1} }。
我可以让Kovenant使用自定义错误类型吗?如果没有,是否继承Exception以包含属性我需要正确的解决方案来实现我想要实现的目标?
答案 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
调用失败。