Проблемы с синхронизацией Jquery

#jquery #asynchronous #jfeed

#jquery #асинхронный #jfeed

Вопрос:

Итак, у меня есть базовая функция, которая получает 2 канала. Моя проблема в том, что функция, выполняющаяся асинхронно, переходит к функции оповещения (для тестирования), прежде чем она выполнит функцию для получения обоих каналов. Я уверен, что есть жизнеспособное решение, но это заставляет меня ломать голову. вот сценарий. Я был бы очень признателен за помощь, спасибо!

 function getFeeds(){
    jQuery.getFeed({
        url: 'proxy.php?url=' feed1,
        success: function(feed) {       

            for(var i = 0; i < feed.items.length amp;amp; i < 10; i  ) {

                var item = feed.items[i];

                s_string  = '<div class = "cont_div a' i '"><h2>'
             /*     '<a href="'
                  item.link
                  '">'*/
                  item.title
                /*  '</a>'*/
                  '</h2></div>';

               /* html  = '<div class="updated">'
                  item.updated
                  '</div>';

                html  = '<div>'
                  item.description
                  '</div>';*/
            }

        }  
    });    
    jQuery.getFeed({
        url: 'proxy.php?url=' feed2,
        success: function(feed) {       

            for(var i = 0; i < feed.items.length amp;amp; i < 10; i  ) {

                var item = feed.items[i];

                s_string  = '<div class = "cont_div a' i '"><h2>'
             /*     '<a href="'
                  item.link
                  '">'*/
                  item.title
                /*  '</a>'*/
                  '</h2></div>';

               /* html  = '<div class="updated">'
                  item.updated
                  '</div>';

                html  = '<div>'
                  item.description
                  '</div>';*/
            }


       } 
    });    
alert(s_string);
} 
  

Ответ №1:

Вы должны обработать два запроса как отдельные временные рамки:

  1. создайте две переменные для показателей успеха
  2. поставьте галочку внутри обратных вызовов
  3. какой запрос завершится последним, выполнит ваш finished_callback

Код выглядит примерно так:

 function getFeeds(finished_callback) {
    var feed_a_finished = false,
        feed_b_finished = false,
        s_string = "";

    jQuery.getFeed( {
        url: 'proxy.php?url=' feed1,
        success: function(feed) {
            /* Your code ... */
            feed_a_finished = true;
            if (feed_a_finished amp;amp; feed_b_finished) {
                finished_callback();
            }
        }  
    });
    feed_b_finished = false; 
    jQuery.getFeed({
        url: 'proxy.php?url=' feed2,
        success: function(feed) {       
            /* Your code ... */
            feed_b_finished = true;
            if (feed_a_finished amp;amp; feed_b_finished) {
                finished_callback();
            }
        } 
    });
}

getFeeds(function () {
    alert(s_string);
});