ExtJS, это потокобезопасно? - PullRequest
       6

ExtJS, это потокобезопасно?

0 голосов
/ 20 августа 2011

я использую переменную для ограничения операций запроса пользователей, так же как и критическую область ОС。

//call 'fun' only if it is free(at the end of fun ,it will do isQuery=true)
var getInfo= function(param,callback){
    if(!isQuery){   
     isQuery = true;
     fun(param,callback);
    }
}

но когда два запроса произошли одновременно, param пошло не так, как A получил param из B, в то время как B не вызвал fun успешно! Я думаю, что это проблема многопоточности,

Когда A был авторизован (isQuery == false) для вызова 'fun', и непосредственно перед тем, как должно было исполниться предложение 'fun(param,callback)', B вызвал getInfo и передал новые param и callback getInfo, но теперь isQuery == true, B не авторизован, затем getInfo пытался выполнить fun (param,callback) с аргументами B, так что все пошло не так, я прав?

PS: пожалуйста, прости мой плохой английский ...

ps2: большое спасибо, но я все еще чувствую себя неуверенно, может быть, это не проблема многопоточности, но как это происходит? Существует только один экземпляр getInfo, поэтому он всегда будет содержать последний аргумент?

1 Ответ

0 голосов
/ 31 августа 2011

Код в примере недостаточен для решения проблемы, и проблема, вероятно, вообще не связана с Ext JS.Пожалуйста, предоставьте полный исходный код.

Возможно, здесь есть распространенная ошибка Javascript с функцией двойного ввода с внутренней функцией, подобной этой

    function broken(url, x) {

        var params = { something : x }

        function post() {
            $("#elem).get(url, params);
        }   

        post();

    }

broken () сохраняет только один параметр params внутри it и делегирует это замыканиям.Поскольку вы вводите функцию дважды, когда начальное состояние параметров все еще используется, первое состояние параметров переопределяется.

Чтобы обойти проблему, передайте параметры функции только как есть, не создавайте локальные переменные var в функциях, которые могут вводиться дважды.

...