流星:这个模拟的时间比Meteor.isClient更有用吗?

Eli*_*ock 7 meteor

this.isSimulation的定义:

Access inside a method invocation. Boolean value, true if this invocation is a stub.
Run Code Online (Sandbox Code Playgroud)

Meteor.isClient的定义:

Boolean variable. True if running in client environment.
Run Code Online (Sandbox Code Playgroud)

在什么情况下this.isSimulation会有用?为什么我不能一直只使用Meteor.isClient?

我正在使用Meteor.isClient来检查客户端文档是否与使用此简单模式属性的服务器同步:

unsynced: {
  type: Boolean,
  autoValue: function () {
    return Meteor.isClient;
  }
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但其他人说使用this.isSimulation,除了这样做,这对我不起作用.

Ste*_*han 7

我正在接受Slava的评论并将其转化为答案;)这个想法isSimulation可能会在服务器或客户端的任何地方变为现实.它仅在Method上下文中有用.正如Slava所说,当服务器充当另一台服务器的客户端时,可以使用模拟.

isClient可用于各种代码,而不仅仅是内部Method.它可以防止代码在可能引发错误的环境中执行(比如Session在服务器上使用).

对于延迟补偿,您经常在客户端和服务器上运行相同的方法,但如果您将数据插入数据库,显然客户端只能模拟这个.因此,有时确定模拟是在运行还是数据库实际更改是有帮助的.

在您的情况下,您可能需要调整方法以检查服务器是否保存文档更加健壮.为此,我将isServer在方法中添加一个块来设置标志synced,truefalse在客户端更改数据时将其设置为.理想情况下,它与成功的更新/ upsert耦合.