Метеор - отмена метода сервера от клиента
Я выполняю подсчет базы данных с помощью метода сервера. Пользователи могут выбирать, как они хотят, чтобы счет выполнялся, а затем вызывать метод.
Моя проблема в том, что счет может занять некоторое время, и пользователь может изменить свое мнение во время работы метода и запросить другой счет. Есть ли способ отменить вызванный метод и запустить новый счет?
Я думал, что this.unblock() может работать; он позволит запустить новый метод, но он не отменяет старый метод. Я также рассмотрел предварительный подсчет, а затем просто использовал поиск, но слишком много селекторных комбинаций.
Здесь мой код, это довольно просто:
//Server
Meteor.methods({
getFilterCount: function(oFilterSelector) {
return clMaBldgs.find(oFilterSelector, {}).count();
}
});
//Client
Meteor.call('getFilterCount', oFilterSelector, function (error, result) {
//do some stuff
});
Ответы
Ответ 1
Отмена уже сделанного вызова метода к серверу от клиента невозможна.
Но если ваш метод вызывается несколько раз за короткий промежуток времени, и вам важен только результат последнего вызова. Вы можете использовать debounce, чтобы отложить выполнение на несколько раз. Это поможет уменьшить ненужные звонки на сервер.
Ответ 2
Больше работы, но если у вас есть реактивная переменная (может быть запись в БД), которая является статусом метода, и в самом методе вы проверяете этот флаг, каждый шанс, который вы получаете для статус.
{
_id: "some id for the method", running: true
}
Псевдокод для метода
Meteor.methods({
method: (_id) => {
status = getStatusForId(_id);
while(status) {
status = getStatusForId(_id);
}
}
});
Затем, чтобы остановить его, вы просто обновляете этот флаг как false, и метод останавливается, как только он может.