ExtJS,它是线程安全的吗?

时间:2011-08-20 12:03:16

标签: javascript multithreading extjs thread-safety

我使用变量来限制用户的查询操作,就像操作系统的关键区域一样。

//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出错了,就像收到的B param,而B没有成功召唤!我认为这是一个多线程问题,

当A被授权(isQuery == false)称为“有趣”时,就在句子“fun(param,callback)”即将执行之前,B调用了getInfo,并传递了新的{{ 1}}和paramcallback,但是现在,getInfo,B未经授权,然后isQuery == true使用B的参数执行fun getInfo,所以它出错了,我是对的?

ps:请原谅我可怜的英语......

ps2:非常感谢,但我仍然感到不确定,也许这不是一个多线程问题,但是这是怎么回事?只有一个'getInfo'实例,所以它总会保留最新的参数吗? / p>

1 个答案:

答案 0 :(得分:0)

示例中的代码不足以解决问题,问题可能与Ext JS无关。请提供完整的源代码。

你在这里可能是一个常见的Javascript错误,带有双重输入功能,内部函数就像这样

    function broken(url, x) {

        var params = { something : x }

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

        post();

    }

broken()只保留一个params状态并将其委托给闭包。因为您输入了两次函数,当仍然使用初始参数状态时,将覆盖第一个参数状态。

要解决此问题,只需按原样传递函数参数,不要在可能双重输入的函数中创建var locals。