我是否可以假设对Meteor方法的调用将完全按照客户端发布的顺序在服务器上执行?换句话说:Meteor方法能否保持因果关系?
编辑:无论答案是什么 - 除非我在那里忽略它,否则应该进入文档。
答案 0 :(得分:2)
注意:我认为下面的内容是正确的,但我还没有在我的代码中确认。我想从流星核心小组获得更多的意见。
那就是说,这些是我最初的想法:
如果您使用this.unblock
在服务器上使用调用该方法,该函数将同步运行,从而阻止所有其他服务器端调用。这是唯一方案,您可以保证Meteor.method
来电的顺序。 The docs给出了一个很好的概述。
否则,对于this.unblock
,方法将在服务器上异步运行,因此您将没有订购保证。
但是我还没有在我的代码中确认这一点。无论服务器端代码中的this.unblock
如何,控制台都会按照第二至第三顺序记录消息。在服务器上,我希望订单是第三秒。
if (Meteor.isServer) {
Meteor.methods({
first: function() {
console.log("server first");
return "right away";
},
second: function () {
this.unblock();
for(var i = 0; i < 10000000; i++) {}
console.log("server second");
return "second one";
},
third: function () {
console.log("server third");
return "last";
},
});
}
if (Meteor.isClient) {
Meteor.startup(function() {
Meteor.call("first", function(error, result) {
console.log("first completed: " + result);
});
Meteor.call("second", function(error, result) {
console.log("second completed: " + result);
});
Meteor.call("third", function (error, result) {
console.log("third completed: " + result);
});
});
}
答案 1 :(得分:2)
在给定的客户端/服务器连接上,服务器按顺序处理来自客户端的消息(方法调用,子/ unsub请求等)。在发生以下两种情况之一之前,服务器不会开始处理消息N + 1:
this.unblock
。(可以想象将来放宽这些限制,以便可以并行处理多个订阅方法,例如。)