我有以下情形:流星如何在第一个完成前阻止方法调用?
客户端有一个按钮,点击它会在服务器端,将调用API,并获取产品执行Meteor.call
方法,在这期间我wan't禁用此按钮+阻止此方法再次执行基本上没有任何东西阻止你点击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};
}
});
我不熟悉,流星明确,但在一般情况下,你**不能**防止被称为服务器方法(他们总能做到在控制台)。你可以做什么,在进入'getActiveProducts'方法时,首先检查是否设置了一个指示用户已经调用该函数的特定标志。如果已设置,则跳过该功能的其余部分。如果没有设置,请在返回之前将其设置并取消设置。 – Gerrat
@Gerrat如果流星也是如此,我还不确定如何在服务器端启动检查并跳过功能,如果它已经执行并且尚未完成。另外,如果我有很多按钮/功能,我猜可能有一个类似的东西,如果没有,我将不得不创建一个,使其容易一行全局功能 – zumbamusic