当我调用Meteor.methods时,我使用
var wait = function(sim){
if (!sim) {
var Future = Npm.require('fibers/future');
var future = new Future();
Meteor.setTimeout(function() {
future['return']();
}, latency * 1000);
future.wait();
}
};
模拟服务器上的延迟。有没有办法在直接处理Meteor.collections时模拟延迟?
更新:
我想打电话
mycollection.insert({whatever:iwant}, function(error, result){
... show that the server collection is updated now ...
});
... show that the server collection is not updated yet ...
为了测试这种行为,我想模拟服务器端的延迟,就像我为Meteor.method调用做的那样。
答案 0 :(得分:0)
您也可以使用客户端方法模拟延迟
客户端电话
Meteor.call("something");
客户端'虚拟方法'
Meteor.methods({
something:function() {
Collection.insert({this_is_virtual: true});
}
});
服务器端方法
Meteor.methods({
something: function() {
wait();
Collection.insert({this_is_virtual: false});
});
});
客户端方法将为延迟补偿创建虚假数据,值this_is_virtual
为true
。一旦真实数据到达,它将变为假。
您可以使用它在客户端上创建模拟数据。也可以在服务器端使用相同的方法。您可以使用this.isSimulation
来确定它是否是延迟补偿,'虚拟',方法。
使用此“延迟补偿”添加客户端集合。所以即使你有模拟延迟也不会做任何事情。
这是流星的基本原理之一。如果你想避免它,你将不得不使用如上所述的方法/调用,但没有客户端模拟存根。但我怀疑这不值得,因为延迟补偿是一个有用的功能。