【发布时间】:2014-12-19 21:17:25
【问题描述】:
我有以下场景:
客户端有一个按钮点击它将在服务器端执行Meteor.call方法,该方法将调用API并获取产品,在此期间我不想禁用此按钮+阻止此方法再次执行基本上没有停止您单击按钮 100 次,服务器将继续一次又一次地执行相同的方法。
我的一些想法:使用会话禁用按钮(问题:仍然可以使用控制台 Meteor.call 并滥用它)
我还在文档中查看了Meteor.apply,wait:true 似乎并没有停止方法执行。老实说,我不确定如何在没有黑客攻击的情况下处理这种事情。
客户端:
'click .button-products': function(e){
Meteor.call('getActiveProducts', function(error, results){
if (error)
return Alerts.add(error.reason, 'danger', {autoHide: 5000});
if (results.success)
return Alerts.add('Finished Importing Products Successfully', 'success', {autoHide: 5000});
})
}
服务器端
Meteor.methods({
getActiveProducts: function(){
var user = Meteor.user();
var api = api.forUser(user);
importProducts = function(items){
nextPage = items.pagination.next_page;
items.results.forEach(function(product){
var sameproduct = apiProducts.findOne({listing_id: product.listing_id});
if (sameproduct) {
return;
}
var productExtend = _.extend(product, {userId: Meteor.userId()});
apiProducts.insert(productExtend);
});
};
var products = api.ProductsActive('GET', {includes: 'Images', limit: 1});
importProducts(products);
while (nextPage !== null) {
products = api.ProductsActive('GET', {includes: 'Images', page: nextPage, limit: 1});
importProducts(products);
}
return {success: true};
}
});
【问题讨论】:
-
我对 Meteor 并不特别熟悉,但总的来说,您不能阻止调用服务器方法(他们总是可以在控制台中执行此操作)。您可以做的是,在输入
getActiveProducts方法后,首先检查是否设置了某个标志,表明用户已经调用了该函数。如果已设置,请跳过该功能的其余部分。如果未设置,则在返回之前设置并取消设置。 -
@Gerrat 如果流星也是如此,我仍然不确定如何在服务器端启动检查并跳过功能,如果它已执行但尚未完成。另外,如果我有很多按钮/功能,我想可能有一个类似的包,或者如果没有,我将不得不创建一个以简化单行全局功能
标签: meteor