以下是可以同时调用的函数。我想知道value1
和value2
是否是线程安全的
var value1 = 0;
postSomething = function(model){
return this.$http.post(url, model).then(function(response){
if(model == "hello")
value1 = true;
else
value2 = true;
}, function(response){});
}
以例如:
在model == hello
之前进行呼叫,同时在服务器响应另一个model == bye
的呼叫之前。在这种情况下会发生什么?
答案 0 :(得分:1)
请注意,javascript不使用线程;运行代码不会被中断,但是对外部资源的异步调用不一定按它们被调用的顺序处理。 (相反,它们通常按接收答案的顺序处理)
在被调用函数范围之外访问的变量不受保护。
在这个特定情况下;当回调接收到一个模型==“bye”时,value2 global将从那一刻开始设置为true(在此之前它不存在,请注意value2尚未像vlaue1那样初始化)。当回调接收到模型==“hello”时,将从该时刻开始设置value1。
如果它们都写入同一个变量,那么该变量将具有从最后一个已处理的回调调用获得的值。这有时确实是不可预测的。
略微混淆一个稍微混乱的问题。这是否回答了你的问题?