Javascript ExtJS,它是线程安全的吗?
我使用一个变量来限制用户的查询操作,就像操作系统的关键区域一样Javascript ExtJS,它是线程安全的吗?,javascript,multithreading,extjs,thread-safety,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出错,就像
//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的A收到了param
,而B没有成功调用fun!我认为这是一个多线程问题
当A被授权(isQuery==false
)调用“fun”时,就在“fun(param,callback)
”语句即将执行之前,B调用了getInfo
,并将新的param
和callback
传递给getInfo
,但现在,isQuery==true
,B未被授权,然后用B的参数执行fun(param,callback)
,所以它出错了,对吗
请原谅我糟糕的英语
ps2:非常感谢,但我仍然不确定,也许这不是一个多线程问题,但这是怎么发生的?只有一个“getInfo”实例,所以它总是保留最新的参数吗?示例中的代码不足以解决问题,而且问题可能与Ext JS无关。请提供完整的源代码 这里可能有一个常见的Javascript错误,即双输入函数的内部函数如下
function broken(url, x) {
var params = { something : x }
function post() {
$("#elem).get(url, params);
}
post();
}
breaked()只在其内部保留一个参数状态,并将其委托给闭包。因为您输入函数两次,当初始参数状态仍在使用时,第一个参数状态将被覆盖
要解决这个问题,只需按原样向前传递函数参数,请不要在可能重复输入的函数中创建var局部变量。JS在所有浏览器中都在一个线程中运行,但chrome我想这更多的是关于“请求安全”,而不是线程安全,我相信这是您问题的答案。