我在我的应用程序中将RxJava和AWS API Gateway一起使用。
代码在这里:
Object
问题是,当用户在搜索过程中更改文本的频率过高并且api调用已在进行中时,我想在发送新匹配之前取消先前的调用,因为由于查询更改,我不希望对先前匹配做出响应。
我也尝试使用disabled.cancel,但它给出了错误
public boolean equals(Object obj)
我如何实现我的目标以保存我的匹配?任何想法都是可以理解的。
谢谢
答案 0 :(得分:1)
某些API通过引发无法中继的异常来响应取消。如果此类崩溃是一致的(例如,您始终从此类API中获得InterruptedIOException
,则可以专门忽略此类异常,因此RxJava不会知道它们。
通过fromCallable
很难做到这一点,因为您必须返回非空值,但是您可能无法创建所涉及类型的实例。因此,我建议使用create:
Single.create(emitter -> {
try {
emitter.onSuccess(client.postSearch(keyword,offset));
} catch (InterruptedIOException ex) {
// ignore
} catch (Throwable ex) {
emitter.onError(ex);
}
});
编辑:如果可以创建±n SearchResponse
,则可以继续使用fromCallable
:
Single.fromCallable(() -> {
try {
return client.postSearch(keyword,offset);
} catch (InterruptedIOException ex) {
// fromCallable won't actually emit this
return new SearchResponse();
}
});