Meteor.call()每次限制一个方法,或者异步方法调用阻塞另一个方法

时间:2015-05-08 15:52:35

标签: meteor

我有一个相当长时间运行的后台任务,我从前端调用Meteor.call(),然后调用服务器端方法。此任务最终返回一个值。应用程序并不真正关心这个值,成功或错误,但仍然希望最终弹出成功的消息(使用alertify,但它与问题无关)。

方法使用期货,所以它是异步的。

myQueueMethod: function(data) {
  var future = new Future();
  // do things, then future.return or future.throw
  return future.wait();
}

如果我调用此方法,它会阻止任何其他服务器端方法调用,直到将来返回或抛出。这种方法是不可取的。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

this.unblock()意味着这样做:

myQueueMethod: function(data) {
  var future = new Future();
  this.unblock();
  // do things, then future.return or future.throw
  return future.wait();
}

这是the documentation

答案 1 :(得分:2)

您还可以做的是,创建一个“服务”集合并通过服务器发布方法订阅它。

当调用Meteor.method()从该函数返回时,只返回true / false,当放置任务时。在服务器上,您可以运行长期流程,然后在该集合中插入数据。

因此,在客户端,您“监听”或“观察”该更改并收到结果(如果有)。

要了解我在说什么,请查看:

MeteorPad Playground 1

MeteorPad Playground 2

这将完全解耦您的处理。

干杯 汤姆

答案 2 :(得分:0)

只是旁注,return是javascript中的保留字,因此最好在您的代码中执行:

future['return']

instead of

future.return