Проблемы с таймингом в Javascript

У меня возникла проблема с таймингом в JavaScript, и я не могу понять, в чем дело.

app.module.registerItem = function(callback) {
    app.module.selectedItems.push(item);
    if (typeof callback === 'function') {
        callback();
        app.module.refreshTotalPrice();
        app.audio.playSuccessSound();
    }
}

app.module.refreshTotalPrice = function() {
    var totalPrice = 0;
    $.each(app.module.selectedItems, function(index, item) {
        totalPrice += parseFloat(item['price']); // иногда здесь возникает ошибка 'not found'
    });
}

Иногда на предпоследней строке код выдает ошибку. Я думал, что push выполняется синхронно. Что может быть причиной моей проблемы? Есть предложения?

Тебе точно стоит проверить, не происходит ли асинхронных задержек в колбеке. Бывает, что данные не успевают обновиться. Можешь попробовать промисы или async/await. Или просто удостоверься, что элементы точно добавлены в массив до вызова refreshTotalPrice.

Похоже, проблема может быть в том, что ваш колбек работает как-то асинхронно. Даже если он выполняется быстро, небольшая задержка может сбить баланс. Попробуйте использовать async/await, чтобы дождаться окончания колбека перед вызовом refreshTotalPrice. Или проверьте, что массив selectedItems всегда актуален перед добавлением новых айтомов. Ещё можно добавить проверку на существование item и его свойства price, чтобы избежать ошибок.

Вполне возможно, что item не успевает добавиться в selectedItems до вызова refreshTotalPrice. Попробуй сделать так, чтобы колбек и остальные действия ждали добавления. Например:

app.module.registerItem = function(callback) {
    app.module.selectedItems.push(item);
    if (typeof callback === 'function') {
        callback();
        setTimeout(() => {
            app.module.refreshTotalPrice();
            app.audio.playSuccessSound();
        }, 0);
    }
}