【发布时间】:2015-03-20 02:15:00
【问题描述】:
我对 Meteor、纤维和期货还很陌生,我正在尝试了解 Meteor 方法的工作原理。据我了解,来自客户端的每个方法调用都会等待前一个方法完成。这种信念主要基于 Meteor 文档中 this.unblock() 函数的文档。但是,当我尝试使用 Meteor.setTimeout() 调用设置一个简单示例时,这似乎不是一个正确的假设。
methodCall.js:
if (Meteor.isClient) {
Template.hello.events({
'click button': function () {
Meteor.call('test', function(error, result){
});
}
});
}
if (Meteor.isServer) {
Meteor.methods({
test: function(){
console.log("outside");
Meteor.setTimeout(function(){
console.log("inside");
return 'done';
}, 2000);
}
});
}
多次触发'click button'事件时,终端输出如下:
outside
outside
outside
outside
inside
inside
inside
inside
而不是像我期望的那样在outside 和inside 之间交替。我认为关于Meteor.setTimeout() 有一些非常相关的信息,但我在文档中找不到任何表明这种行为的信息。我错过了什么,有没有办法让客户端的 Meteor 方法调用等到前一个调用完成后再开始执行下一个?
我在 SO 上发现了 this 问题,这似乎很有希望,但问题更侧重于阻止从客户端调用该方法的可能性。同样,接受的答案并不完全令人满意,因为它侧重于使后续调用跳过 Meteor 方法的某些代码块,而不是等待第一次调用完成。这很好是我想的答案,但我真的很想了解为什么方法调用没有被阻止,因为我觉得 Meteor 文档表明。
【问题讨论】:
标签: javascript meteor