2014-09-02 23 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()+" + ") 
    } 
    } 
});