Столкнулся с совершенно бредовой ситуацией в джаваскрипте. Вычисляю количество недоставленных заказов в массиве курьеров (метод глобального объекта):
var CourierRouter = {
...
num_pending_orders: function() {
var num = 0;
console.log(CourierRouter.couriers_done.length===2, CourierRouter.couriers_done);
for(var i=0; i<CourierRouter.couriers_done.lenth; i++)
{
console.log("i'm inside");
num += CourierRouter.couriers_done[i].pending_orders.length;
}
console.log('after');
return num;
}
}
использовать в теле функции this нет возможности, потому что она вызывается из success колбэка $.ajax и хотя, последний вызывается из метода объекта, в колбэке this совсем другой.
в консоли имею:
true, Array [Object , Object ]
after
то есть проперть length является числом 2 и в массиве действительно 2 элемента,
но в цикл не заходит!
а если явно указать двойку:
num_pending_orders: function() {
var num = 0;
console.log(CourierRouter.couriers_done.length===2, CourierRouter.couriers_done);
for(var i=0; i<2 /*CourierRouter.couriers_done.lenth */; i++)
{
console.log("i'm inside");
num += CourierRouter.couriers_done[i].pending_orders.length;
}
console.log('after');
return num;
}
то все в порядке:
true, Array [Object , Object ]
i'm inside
i'm inside
after
в коде есть асинхронные вызовы - запросы к Яндекс картам, к своему скрипту, и я подозреваю, что это они аукнулись, но как?? и что делать??