流星-从客户端取消一个服务器方法

Meteor - Cancelling a Server Method from the Client

本文关键字:一个 服务器 方法 客户端 取消 流星      更新时间:2023-09-26

我正在通过服务器方法执行数据库计数。用户可以选择如何执行计数,然后调用该方法。

我的问题是计数可能需要一些时间,用户可能会在方法运行时改变主意并请求不同的计数。是否有任何方法可以取消调用的方法并运行新的计数?

我认为this.unblock()可能工作;它将允许运行新方法,但不会取消旧方法。我也考虑过预计数,然后只使用查找,但是有太多的选择器组合。

这是我的代码,它相当简单:

//Server
Meteor.methods({
    getFilterCount: function(oFilterSelector) {
        return clMaBldgs.find(oFilterSelector, {}).count();
    }
});
//Client
Meteor.call('getFilterCount', oFilterSelector, function (error, result) {
    //do some stuff
});

无法从客户端取消对服务器的方法调用。

但是如果你的方法在短时间内被多次调用,并且你只关心最后一次调用的结果。您可以使用debounce来延迟执行一段时间。这将有助于减少对服务器的不必要调用。

更多的工作,但是如果您有一个反应变量(可能是DB中的一个条目),它是方法的状态,并且在方法本身中,您每次获得状态时都要检查该标志。

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

方法

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

要停止它,只需将该标志更新为false,方法就会尽快停止