Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor-从客户端取消服务器方法_Javascript_Meteor - Fatal编程技术网

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

Javascript Meteor-从客户端取消服务器方法,javascript,meteor,Javascript,Meteor,我正在通过服务器方法执行数据库计数。用户可以选择如何执行计数,然后调用该方法 我的问题是,计数可能需要一些时间,用户可能会在方法运行时改变主意并请求不同的计数。我有没有办法取消调用的方法并运行新的计数 我认为这个。unblock()可能会起作用;它将允许运行新方法,但不会取消旧方法。我也考虑过预计数,然后只使用查找,但是选择器组合太多了 这是我的代码,非常简单: //Server Meteor.methods({ getFilterCount: function(oFilterSelec

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

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

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

这是我的代码,非常简单:

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

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

更多的是一种变通方法,但是如果您有一个被动变量(可能是DB中的一个条目),它是方法的状态,并且在方法本身中,您会在每次获得状态的机会时检查该标志

{
    _id: "some id for the method", running: true
}
方法的伪代码

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

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

不可能从客户端取消已对服务器进行的方法调用


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

你发现了吗?我也想知道。有没有办法显示正在运行的呼叫列表?遗憾的是,没有。但是,我在mongo文档中找到了这个技巧。我还没试过。它可能可以用于取消db ops:这里的游戏有点晚了,但似乎
取消阻止
仍然是推荐的方法;引用第3段。@chazsolo,unblock肯定允许您运行新函数,问题是旧函数可能仍在运行。如果你知道你不再需要旧进程了,那就最好杀掉它们。@Adam同意了,只是说除了你在Mongo中找到的
db.killOp
引用之外,我只能找到这些。也许这是千年发展目标路线图上的东西?