Meteor - 从客户端取消服务器方法

时间:2014-07-24 21:29:27

标签: javascript meteor

我正在通过服务器方法执行数据库计数。用户可以选择他们想要执行计数的方式,然后调用该方法。

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

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

这是我的代码,它很简单:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

更多的解决方法,但如果你有一个反应变量(可能是数据库中的一个条目),这是该方法的状态,并且在方法本身,你每次有机会检查该标志状态。

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

方法的伪代码

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

然后停止它,你只需将该标志更新为false,方法将尽快停止。