如何模拟流星集合插入/更新/删除中的延迟

时间:2013-12-16 17:20:14

标签: meteor

当我调用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调用做的那样。

1 个答案:

答案 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_virtualtrue。一旦真实数据到达,它将变为假。

您可以使用它在客户端上创建模拟数据。也可以在服务器端使用相同的方法。您可以使用this.isSimulation来确定它是否是延迟补偿,'虚拟',方法。

使用此“延迟补偿”添加客户端集合。所以即使你有模拟延迟也不会做任何事情

这是流星的基本原理之一。如果你想避免它,你将不得不使用如上所述的方法/调用,但没有客户端模拟存根。但我怀疑这不值得,因为延迟补偿是一个有用的功能。