2017-08-11 105 views
0

我在項目中已經列舉了一些問題,因爲節點是異步的,但現在我有一個for loop,並且我在循環結束或休息之後做了一些事情,看起來好像同步工作,我想知道爲什麼。節點同步運行,等待循環完成

我有這樣的代碼:

  var newItem = true; 

      for (var i = 0; i < cart.length; i++) { 
       if (cart[i].title == slug) { 
        cart[i].qty++; 

        newItem = false; 
        break; 
       } 
      } 

      if (newItem) { 
       cart.push({ 
        title: slug 
       }); 
     } 

而這一切按預期工作! newItem變量始終具有正確的值。

怎麼新來的東西不總是true

我從來沒有在cart數組中有超過3個項目,這是爲什麼?如果我有1000件物品,它會有不同的表現嗎?

+0

這個代碼是同步的,這就是爲什麼 – marvel308

+0

似乎但是我沒有認爲它應該表現如此。我在另一個實例中有一個for循環,並在循環內部更新了數據庫,並且在循環之後也得到了一些結果,並且它不能同步工作,我不得不使用回調來創建一個函數。 –

回答

0

你提供的同步運行,如果你想測試它是否工作在異步狀態下嘗試運行該代碼的代碼

var newItem = true; 

for (var i = 0; i < cart.length; i++) { 
    setTimeout(function(){ 
     if (cart[i].title == slug) { 
      cart[i].qty++; 

      newItem = false; 
      break; 
     } 
    }, 1000); 
} 

if (newItem) { 
    cart.push({ 
     title: slug 
    } 
} 
+0

我有類似的代碼,其中數據庫正在循環內部更新,循環完成後,我從數據庫中得到結果,但結果總是落後一步,代碼與此類似。從數據庫獲取結果的代碼並沒有等待循環完成,所以我不明白爲什麼'if(newItem)'在這裏等待循環結束。 –

+0

這裏的代碼是如何形成代碼的問題在這裏https://stackoverflow.com/questions/45484161/locals-variable-not-updating-correctly? –

+0

在這個例子中,if會在for循環之後運行,但是因爲它正在進行異步調用,所以setTimeout內部的部分至少會在1秒之後發生,因此在循環完成後newItem最初會是假的 – marvel308