簡體   English   中英

在ValidatedMethod中流星this.unblock

[英]Meteor this.unblock in ValidatedMethod

我有一個經過驗證的方法:

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,我該如何對經過驗證的方法進行處理? 我試過將它放在運行后,運行前,整個塊之前...

你們可以幫忙嗎?

第一個問題,對服務器進行如此多次的調用以一次更新一部分是否不好? 我應該只保存一個按鈕(ew!)並進行一次批量更新嗎?

如果要避免單個用戶的大量點擊,請使用ddp-rate-limiter程序包並為您的方法創建一個規則。 使用此程序包,您可以在一段時間內限制服務器上的呼叫。

第二個問題,如果我保持原樣的方法代碼,但添加this.unblock或Meteor.defer,我該如何對經過驗證的方法進行處理? 我試過將它放在運行后,運行前,整個塊之前...

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

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM