我有以下情形:流星如何在第一個完成前阻止方法調用?
客戶端有一個按鈕,點擊它會在服務器端,將調用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