2014-09-02 56 views
0

我有這樣的代碼,每個第一for循環重新開始,我希望它,因爲它是使用新的用戶數組空白復位時間,但我用一個數組中的所有值進行輸出。的JavaScript - 陣列沒有得到重新設置爲[](空白)

var items = []; 
    for (var i = 0; i < userArray.length; i++) { 

     items.length = 0; 
     for (var i2 = 0; i2 < test.length; i2++) { 

      var UserFavourite = Parse.Object.extend("UserFavourite"); 
      var queryUserFav = new Parse.Query(UserFavourite); 
      queryUserFav.equalTo('item', test[i2].get('item')); 
      queryUserFav.equalTo('school', test[i2].get('school')); 
      queryUserFav.equalTo('user1', userArray[i]) 
      queryUserFav.find().then(function(res) { 

        for (var i3 = 0; i3 < res.length; i3++){ 
         var item = res[i3]; 
         var itemName = item.get('item'); 
         items.push(itemName); 
         if (items !== []) { 
          console.log(items.toString()+" + ") 
         } 
        } 

      }); 

     } 
    } 

userArray.length等於2並且test.length等於20.如果您想知道。當它到達循環的第一個時,我希望數組被設置爲空,但它不是?

感謝您的幫助提前。

+1

鑑於*項目*是一個數組,表達式'項目!==因爲你在比較不同的對象[]'將始終返回true。也許你的意思是'items.length!= 0'或者更簡單的'if(items.length)'。 – RobG 2014-09-02 03:19:20

+0

@RobG好吧,但這並不影響爲什麼數組沒有被重置爲空 – iqueqiorio 2014-09-02 03:21:37

回答

1

我thnk你應當使用這樣的:

items.length = 0 

因爲項= []

創建新的數組,其是不一樣的。

另外添加一些承諾,使異步請求等待

0

你試過:

items.length = 0; 

代替:

items = []; 
+0

沒有工作字符 – iqueqiorio 2014-09-02 03:19:38

+0

你的答案應該是'items.length == 0'而不是一個'=' – jasonscript 2014-09-02 03:21:29

+0

@jasonscript I指的是第2行 - 即清除數組。 – Donal 2014-09-02 03:23:26

0

能否請您連接一個 「+」 的項目變量在控制檯日誌中,像這樣:

console.log(items.toString()+" + "); 

只是爲了調試的目的看,如果數組實際上是被清除或沒有。我相信它已經可能被清除。

+0

好吧,我做到了,跑了它,我怎麼知道它是否被清除。輸入是'I2014-09-02T03:39:55.597Z] Spicy Italian Sub + I2014-09-02T03:39:55.641Z]辣意大利小組,加勒比雞肉生菜包裝+ I2014-09-02T03:39:57.960Z ]辣意大利小組,加勒比雞肉生菜包裹,布法羅華夫餅薯條+' – iqueqiorio 2014-09-02 03:40:35

+0

歐普..你必須清除成功回調函數內的數組中的項目..請在成功回調裏面檢查一下,看看你什麼時候應該清除陣列,然後清除它..不要手動嘗試從成功回調之外清除它..這應該使其工作 – 2014-09-02 03:50:34

+0

,把所有三個項目返回自己的陣列 – iqueqiorio 2014-09-02 03:53:58

0

你的問題是,你正在執行一個循環,並觸發異步代碼。

被執行前的異步代碼的第一位你的循環將完全完成:

  • 我== 0
  • 復位items
  • 遍歷test(20項)
    • 排隊一個find()與異步成功處理程序
  • 我== 1
  • 重置items
  • 遍歷test(20項)
    • 排隊了find()與異步成功處理程序
  • ......一段時間後,當find()通話結束.. 。
  • 呼叫使用items陣列
每個異步塊

要不是有你沒有顯示出需要訪問items陣列一些其他的代碼,只是你的成功處理程序中創建它,而不是:

queryUserFav.find().then(function(res) { 
    // create array here: 
    var items = []; 

    for (var i3 = 0; i3 < res.length; i3++){ 
    var item = res[i3]; 
    var itemName = item.get('item'); 
    items.push(itemName); 
    if (items !== []) { 
     console.log(items.toString()+" + ") 
    } 
    } 
});