#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, чтобы избежать этих условий гонки, которые вы видите. Я бы посоветовал использовать эти плагины.