并发异步HTTP Post:值线程安全吗?

时间:2016-05-15 11:39:13

标签: angularjs http asynchronous

以下是可以同时调用的函数。我想知道value1value2是否是线程安全的

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的呼叫之前。在这种情况下会发生什么?

1 个答案:

答案 0 :(得分:1)

请注意,javascript不使用线程;运行代码不会被中断,但是对外部资源的异步调用不一定按它们被调用的顺序处理。 (相反,它们通常按接收答案的顺序处理)

在被调用函数范围之外访问的变量不受保护。

在这个特定情况下;当回调接收到一个模型==“bye”时,value2 global将从那一刻开始设置为true(在此之前它不存在,请注意value2尚未像vlaue1那样初始化)。当回调接收到模型==“hello”时,将从该时刻开始设置value1。

如果它们都写入同一个变量,那么该变量将具有从最后一个已处理的回调调用获得的值。这有时确实是不可预测的。

略微混淆一个稍微混乱的问题。这是否回答了你的问题?