我有一个经过验证的方法:
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,我该如何对经过验证的方法执行此操作?我试着把它放在跑步之后,跑步之前,整个街区之前......
你们可以帮忙吗?
答案 0 :(得分:1)
第一个问题,对服务器进行如此多的方法调用以一次更新一部分是不是很糟糕?我应该只是放一个保存按钮(ew!)并进行单次质量更新吗?
如果您想避免单个用户的大量点击,请使用ddp-rate-limiter package并为您的方法创建规则。使用此程序包,您可以按时间段限制服务器上的呼叫。
第二个问题,如果我要保留相同的方法代码但添加this.unblock或Meteor.defer,我该如何对经过验证的方法执行此操作?我试着把它放在跑步之后,跑步之前,整个街区之前......
ValidatedMethod run
函数的工作方式与方法函数相同。因此,您只需在this.unblock
函数中添加run
。
希望它有所帮助!