[英]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.