2017-05-15 21 views
0

我正在进行嵌套的API调用,并将结果的片断放入一个对象数组中。当我把它打印到控制台时,它看起来很好。但是当我尝试调用这些块上的函数时,它们会中断。内置函数的对象数组有类型问题

这里的除了私人API URL代码:

var gate = new Array(); 

jQuery.getJSON(endPoint + "method=GetUsersWithTicketsEventId", function(tickets) { 
    jQuery.each(tickets.message, function(i, ticket) { 
    gate[i] = new Object(); 

    jQuery.getJSON(endPoint + "method=GrabUsersCustomEventInfo&userId=" + ticket.UserId, function(answers) { 
     jQuery.each(answers.message, function(j, answer) { 
     if (answer.meta_key == "42_Volunteering") { 
      if (answer.meta_value != "Array") { 
      gate[i].Roles = answer.meta_value.split(';'); 
      } else { 
      gate[i].Roles = new Array(); 
      } 
     } else if (answer.meta_key == "42_1_TOSDate") { 
      gate[i].Date = new Date(answer.meta_value); 
     } 

     console.dir(gate[0].Date); // This works 
     }); 
    }); 

    }); 

    console.dir(gate); // This works 
    console.dir(gate[0].Date); // This returns undefined 
}); 

第二console.dir的结果()似乎也形成:

> Array(237) 
    > [0 … 99] 
    > 0: Object 
     > Date: Mon May 08 2017 21:09:09 GMT-0700 (Pacific Daylight Time) 
     > __proto__: Object 
      > constructor: function Date() 
... 

我认为这有东西用变量作用域,但是当控制台输出和解释器看到的明显不同时,我不知道如何调试它。

+0

这是一个异步问题。 'console.dir(gate [0] .Date);'在对象建立之前运行。 –

回答

1

在你的代码的末尾:

console.dir(gate); // This works: 

,因为您先前定义你的目标和你告诉控制台打印出来的对象更多的数据进来,这将更新

console.dir(gate[0].Date); // This returns undefined 

这返回未定义,因为在执行的这一点上,数组实际上是空的。您的内部提取尚未填充对象,因此它是未定义的参考。

+0

哦,因为getJSON是异步的!那么我该如何设计这种东西来适应这种情况? – Jared

+0

看看使用承诺等到一切完成。 –