У меня есть эта функция JavaScript.Ajax Calls and Callbacks в JavaScript
function create_categories(callback) {
cart_cats = [];
E.Cart.calculateTotal(function(order) {
cart_total = order.total;
cart_items = order.cart.items;
// loop through the items to get their categories.
for(var i=0; i<cart_items.length; i++) {
get_product_category(cart_items[i].product.id);
}
});
setTimeout(callback, 3000);
}
функция get_product_category
делает Ajax вызов, чтобы получить категорию для cart_item
, а затем толкает его в cart_cats
массив, который является глобально заявил, и мне нужно, чтобы использовать его в моем callback
Теперь я не хочу использовать setTimeout
, потому что я никогда не могу быть уверен в максимальном времени, которое может выполнить функция create_categories
, после чего я вызываю callback
, потому что cart_items
может содержать много элементов.
Я хочу вызвать обратный вызов, когда цикл for завершает выполнение.
'callback;' должно быть 'callback();'. –
Хорошо, это работает! .. но вы можете помочь мне понять это. Я понял, что, поскольку 'get_product_category' делает вызов ajax, элемент управления будет двигаться вперед (из цикла for) и выполнить оператор if. Разве это не так? Когда он продвигается вперед, и когда он ждет завершения заявлений? –
@Mubashar: если бы это сработало, подумали бы вы его принять? Здесь это не обязательно, но полезно как для ответчиков, так и для будущих читателей. – halfer