Проблема синхронизации в функциях Javascript

#javascript #synchronization

#javascript #синхронизация

Вопрос:

Я разрабатываю приложение, в этом приложении у меня есть много функций, которые возвращают нам данные сервера.. У меня есть 40 функций, которые необходимо выполнить 1 к 1, чтобы произошла синхронизация.ИТАК, я взял одну функцию и поместил в нее свои 40 функций… Теперь проблема в том, что некоторые из этих функций пропускают выполнение операций с базой данных

Моя единственная из 40 функций для выполнения этого

 function sync_down_client_info(){
    try {

            parent.parent.parent.stmt_select.text = "select query";
            parent.parent.parent.stmt_select.execute();
            parent.parent.parent.result = parent.parent.parent.stmt_select.getResult();
            if (parent.parent.parent.result.data != null) {
                    for (var i = 0; i < parent.parent.parent.result.data.length; i  ) {

                            var admin_id = parent.parent.parent.admin_id;
                            var sync_client_date =  parent.parent.parent.result.data[i].last_sync_client;
                            // alert(admin_id "======="  sync_client_date);

                            GATEWAY = 'http://projects/one_acc/flashservices/gateway.php';
                            conn = new parent.parent.parent.air.NetConnection();
                            conn.connect(GATEWAY); 

            response = new parent.parent.parent.air.Responder(clientresult, clientFault);
                            conn.call('down_client_info', response,admin_id,sync_client_date);


                            response = new parent.parent.parent.air.Responder(clientserverdatetimeResult, clientserverdatetimeFault);
                            conn.call('check_datetime', response);

                    }
            };
  

и функция clientresult является

 function  clientresult(e)
     {

    for (var i=0; i<e.length; i  ) {
            //alert(e.length);
            parent.parent.parent.stmt_select.text="select query ;
            parent.parent.parent.stmt_select.execute();
            parent.parent.parent.result = parent.parent.parent.stmt_select.getResult();
            if(parent.parent.parent.result.data!=null){


              parent.parent.parent.stmt_insert.text= "update client_info ;
                      parent.parent.parent.stmt_insert.execute();
            } 
  

кто-нибудь может сказать мне, как выполнить эту синхронизацию?

Комментарии:

1. Я действительно не понимаю, о чем вы спрашиваете, поэтому я не могу дать вам совет по этому поводу, но, глядя на ваш код: что со всем parent.parent.parent.xyz' ? Вы можете улучшить это (и, вероятно, ускорить), если добавите var ggp = parent.parent.parent; вверху своей функции (или, возможно, передадите parent.parent.parent в качестве параметра), а затем просто говорите ggp.xyz везде. (На случай, если это не очевидно, я использовал ‘ggp’ для ‘прабабушки и дедушки’.)

2. На самом деле у меня есть много функций, которые выполняют эту функцию clientresult, которая содержит queries…so когда я выполняю эти функции в связке, некоторые из них пропускают запросы, которые им нужно выполнить.. они отлично работают, когда я использую их в одной функции, но когда я использую их в связке из 4 или 5, я не знаю, пропускает ли система некоторые запросы …. есть ли какой-либо способ узнать, как моя функция, такая как sync_down_client_info, выполняет выполнение операций, чтобы я мог поместить свою другую функцию после нее

3. Когда вы говорите «множество функций, которые выполняют эту функцию clientresult», вы имеете в виду, что все они имеют одну и ту же функцию как часть обратного вызова из NetConnection / Responder. Я не знаком с NetConnection / Responder, но если он выполняет что-то асинхронно, а затем возвращается с помощью обратного вызова, я не удивлюсь, если некоторые ответы сбиваются с пути, если вы выполняете 40 одновременно, не говоря уже о 40 ответах на один и тот же обратный вызов. Когда вы говорите «некоторые из них пропускают запросы, которые им нужно выполнить», вы подтвердили, что он даже получает доступ к функции каждый раз?

4. На самом деле многие функции связаны с модулями приложения, и я скомпилировал их в одну функцию синхронизации в соответствии с моими потребностями… И да, это происходит внутри каждой функции, но не выполняет запросы для каждой…

Ответ №1:

В jQuery есть конструкции, подобные AjaxQueue, чтобы избежать этих условий гонки, которые вы видите. Я бы посоветовал использовать эти плагины.

См http://plugins .jquery.com/project/ajaxqueue