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