2017-05-15 5 views
0

Ich mache verschachtelte API-Aufrufe und Teile des Ergebnisses in ein Array von Objekten. Wenn ich dies auf der Konsole ausdrucke, sieht es gut aus. Aber wenn ich versuche, Funktionen auf den Stücken aufzurufen, brechen sie.Array von Objekten mit eingebauten Funktionen hat Typ Probleme

Hier ist der Code mit Ausnahme der privaten URL API:

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 
}); 

Die Ergebnisse des zweiten console.dir() scheinen gut ausgebildet werden:

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

Ich gehe davon aus, das hat etwas zu mache ich mit variablem Umfang, aber ich verstehe nicht, wie man es debuggt, wenn die Konsolenausgabe so offensichtlich anders ist als das, was der Interpreter sieht.

+0

Es ist ein asynchrones Problem. 'console.dir (gate [0] .Date);' wird ausgeführt, bevor die Objekte erstellt wurden. –

Antwort

1

Am Ende des Codes:

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

weil Sie Ihr Objekt zuvor definiert ist und Sie erzählen die Konsole aus dem Objekt zu drucken, die aktualisiert, wenn mehr Daten in kommen

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

Dies gibt undefined zurück, da das Array zu diesem Zeitpunkt in der Ausführung tatsächlich leer ist. Ihr innerer Abruf hat das Objekt noch nicht ausgefüllt, so dass es sich um eine nicht definierte Referenz handelt.

+0

Oooh, weil getJSON asynchron ist !! Also, wie kann ich so etwas konstruieren, um das unterzubringen? – Jared

+0

Sehen Sie sich mit Versprechen zu warten, bis alles fertig ist. –

Verwandte Themen