Отменить запрос gwt requestFactory
-
22-10-2019 - |
Вопрос
Есть ли способ отменить/прервать запросы на заводские запросы? Использование GWT 2.3
Решение
Другой вариант - создать альтернативу com.google.web.bindery.requestfactory.shared.RequestTransport
Тип, вместо использования DefaultRequestTransport
. Анкет Недостатком этого (и ростом подхода Bobv) является то, что вы не узнаете, когда в запросе на сервере вы его убиваете, так что он мог бы уже запустить некоторые из ваших методов - вы не получите отзывы от ни одного из них, Вы просто остановите исходящий запрос.
Я подозреваю, что именно поэтому у RF нет этой функции, как это делает RPC. Рассмотрим даже случай RPC, хотя или requestBuilder - как те, кто уведомит сервер, который они изменили свое мнение, и не запускать запрос? Насколько я понимаю, они этого не делают - единственный способ, которым они выключаются рано, - это когда они пытаются читать/написать в ответ, и получить ошибку TCP, так как соединение было закрыто. (Возможно, я ошибаюсь, и что другая нить следит за состоянием соединения TCP и вызовов thread.stop(Throwable)
, но остановка устарела для какое-то время.)
Одна из мыслей - отправить сообщение на сервер, что заявило ему убить другие запросы из того же сеанса - это потребует активного участия в коде вашего сервера, возможно, сделано общим в ServiceLayerDecorator
подтип, вероятно, по крайней мере в invoke
, loadDomainObject(s)
, а также getSetter
, среди других. Это довольно ясно, чтобы вовлечь, чтобы попросить GWT построить его для вас, хотя ...
Другие советы
Невозможно отменить запрос после fire()
Метод был вызван. Подумайте о создании обычая Receiver
базовый класс, такой как следующее:
public abstract class CancelableReceiver<V> extends Receiver<V> {
private boolean canceled;
public void cancel() {
canceled = true;
}
@Override
public final void onSuccess(V response) {
if (!canceled) {
doOnSuccess(response);
}
}
protected abstract void doOnSuccess(V response);
}
Шаблон может быть повторен для других методов в Receiver
тип.