ValidatedMethod

时间:2016-06-15 03:10:40

标签: javascript meteor reactjs

我有一个经过验证的方法:

export const updateSuitClass = new ValidatedMethod({
  name: 'presets.suitClass.update',
  validate: new SimpleSchema({
    _id: { type: String },
    rankClass: { type: String },
    suitClass: { type: String },
  }).validator(),
  run({ _id, rankClass, suitClass }) {
    const userId = Meteor.userId();
    if (userId) {
      const lookUpPreset = Presets.findOne({ _id });
      if (userId === lookUpPreset.owner) {
        Presets.update(_id, { $set: { [`${rankClass}.${suitClass}`]: !lookUpPreset[rankClass][suitClass] } });
      } else {
        throw new Meteor.Error('not-authorized', 'Please don\'t update another user\'s preset.');
      }
    } else {
      throw new Meteor.Error('not-authorized', 'Please login to update your preset.');
    }
  },
});

在单击事件上调用(在列表中的项目上并切换其旁边的复选标记以指示已选中)以保存用户配置设置的状态。问题是,当用户点击点击次数和点击次数时会调用它,因此会经常调用它。

第一个问题,对服务器进行如此多的方法调用以一次更新一部分是不是很糟糕?我应该只是放一个保存按钮(ew!)并进行单次质量更新吗?

第二个问题,如果我要保留相同的方法代码但添加this.unblock或Meteor.defer,我该如何对经过验证的方法执行此操作?我试着把它放在跑步之后,跑步之前,整个街区之前......

你们可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

  

第一个问题,对服务器进行如此多的方法调用以一次更新一部分是不是很糟糕?我应该只是放一个保存按钮(ew!)并进行单次质量更新吗?

如果您想避免单个用户的大量点击,请使用ddp-rate-limiter package并为您的方法创建规则。使用此程序包,您可以按时间段限制服务器上的呼叫。

  

第二个问题,如果我要保留相同的方法代码但添加this.unblock或Meteor.defer,我该如何对经过验证的方法执行此操作?我试着把它放在跑步之后,跑步之前,整个街区之前......

ValidatedMethod run函数的工作方式与方法函数相同。因此,您只需在this.unblock函数中添加run

希望它有所帮助!