我有一个相当长时间运行的后台任务,我从前端调用Meteor.call(),然后调用服务器端方法。此任务最终返回一个值。应用程序并不真正关心这个值,成功或错误,但仍然希望最终弹出成功的消息(使用alertify,但它与问题无关)。
方法使用期货,所以它是异步的。
myQueueMethod: function(data) {
var future = new Future();
// do things, then future.return or future.throw
return future.wait();
}
如果我调用此方法,它会阻止任何其他服务器端方法调用,直到将来返回或抛出。这种方法是不可取的。有什么建议吗?
答案 0 :(得分:3)
this.unblock()
意味着这样做:
myQueueMethod: function(data) {
var future = new Future();
this.unblock();
// do things, then future.return or future.throw
return future.wait();
}
答案 1 :(得分:2)
您还可以做的是,创建一个“服务”集合并通过服务器发布方法订阅它。
当调用Meteor.method()从该函数返回时,只返回true / false,当放置任务时。在服务器上,您可以运行长期流程,然后在该集合中插入数据。
因此,在客户端,您“监听”或“观察”该更改并收到结果(如果有)。
要了解我在说什么,请查看:
这将完全解耦您的处理。
干杯 汤姆
答案 2 :(得分:0)
只是旁注,return
是javascript中的保留字,因此最好在您的代码中执行:
future['return']
instead of
future.return