2016-05-15 70 views
0

以下是可以同時調用的函數。我想知道value1value2是否是線程安全的Concurrent Async HTTP Post:值線程安全嗎?

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

請注意,JavaScript不使用線程;運行代碼不會中斷,但對外部資源的異步調用並不一定按其調用順序處理。 (相反,它們通常按收到答案的順序處理)

訪問被調用函數範圍之外的變量不受保護。

在這個特定的情況下,當回調接收到模型==「再見」時,value2全局將從此刻開始設置爲true(在此之前它不存在,請注意,value2尚未像vlaue1那樣初始化)。當回調收到一個模型==「hello」時,value1將從那一刻開始設置。

如果他們都將寫入同一個變量,該變量將具有它將從最後一個回調調用已經得到的值處理。有時這確實是不可預測的。

一個稍微長的答案,一個輕微混淆的問題。這回答了你的問題了嗎?