Подтвердить что ты не робот

Метеор - отмена метода сервера от клиента

Я выполняю подсчет базы данных с помощью метода сервера. Пользователи могут выбирать, как они хотят, чтобы счет выполнялся, а затем вызывать метод.

Моя проблема в том, что счет может занять некоторое время, и пользователь может изменить свое мнение во время работы метода и запросить другой счет. Есть ли способ отменить вызванный метод и запустить новый счет?

Я думал, что this.unblock() может работать; он позволит запустить новый метод, но он не отменяет старый метод. Я также рассмотрел предварительный подсчет, а затем просто использовал поиск, но слишком много селекторных комбинаций.

Здесь мой код, это довольно просто:

//Server
Meteor.methods({
    getFilterCount: function(oFilterSelector) {
        return clMaBldgs.find(oFilterSelector, {}).count();
    }
});

//Client
Meteor.call('getFilterCount', oFilterSelector, function (error, result) {
    //do some stuff
});
4b9b3361

Ответ 1

Отмена уже сделанного вызова метода к серверу от клиента невозможна.

Но если ваш метод вызывается несколько раз за короткий промежуток времени, и вам важен только результат последнего вызова. Вы можете использовать debounce, чтобы отложить выполнение на несколько раз. Это поможет уменьшить ненужные звонки на сервер.

Ответ 2

Больше работы, но если у вас есть реактивная переменная (может быть запись в БД), которая является статусом метода, и в самом методе вы проверяете этот флаг, каждый шанс, который вы получаете для статус.

{
    _id: "some id for the method", running: true
}

Псевдокод для метода

Meteor.methods({
    method: (_id) => {
        status = getStatusForId(_id);
        while(status) {
            status = getStatusForId(_id);
        }
    }
});

Затем, чтобы остановить его, вы просто обновляете этот флаг как false, и метод останавливается, как только он может.