Постепенное отрисовка диалогового окна загрузки

Я столкнулся с очень странным поведением диалогового окна Bootstrap. По какой-то причине в приведенной fooниже функции диалоговое окно не отображается сразу. Отрисовка отложена до момента достижения линии $.get(.... Любые идеи, почему это может произойти?

function = foo()
{
   $rows.each(function (i, row) 
   {
       var $row = $(row);
       if (something_is_wrong()) 
       {
           alert_error('Something is wrong', $form, '');
           return;
       }
       // Some other code           
    });
    // The Bootstrap modal dialog shows up when reaching the point below !!!
    $.get('/sending_order_notification/' + legal_entity_own_id, function(response)
    {
        BootstrapDialog.show({ ...
        // ...
     });
}


function alert_error(message, $current_form, function_name)
{
    if ($current_form != undefined)
        $current_form.modal('hide');

    BootstrapDialog.show(
    {
        type: BootstrapDialog.TYPE_DANGER,
        title: '?zN????±???°',
        message: message,
        draggable: true,
        buttons: [{
            label: 'OK',
            action: function(dialogItself) {
                dialogItself.close();
                if (function_name != undefined)
                    $.post('/send_error_report/', function_name);
            }
        }]
    });  
}

ОБНОВЛЕНИЕ Вдохновленный майнесом Maximus, я выбрал следующую работу, которая работала для меня. И все же это не чистое решение, потому что я должен продолжать цикл, даже если он становится бессмысленным.

function = foo()
    {
       var bad_condition_flg = false;
       $rows.each(function (i, row) 
       {
           var $row = $(row);
           if (something_is_wrong()) 
           {
               bad_condition_flg = true;
           }
           // Some other code           
        });
        if (bad_condition_flg);
        {
           alert_errr(...);  
           return;
         }
     }

javascript,bootstrap-dialog,

1

Ответов: 1


1 принят

Чтобы диалоговое окно отображалось, браузер должен выполнить перерисовку. Перерисовать можно только тогда, когда в стеке вызовов нет ничего. Таким образом, диалог будет показан только после fooзавершения выполнения. Это немного отличается при использовании отладчика, потому что иногда остановка на контрольных точках дает время браузера для перерисовки, и диалог может отображаться до того, как стек вызовов пуст.

JavaScript, самозагрузки-диалог,
Похожие вопросы