2

Ich versuche die Google Analytics API über Angular zu verwenden. Ich lade die Analytik Skript ersteWarum zeichnet Chrome Objekte zu unterschiedlichen Zeiten unterschiedlich auf?

<script src="https://apis.google.com/js/client.js"></script> 

ich dann console.log die globalen Variablen gapi, dass die api-Skript erstellt. Dies gibt das Objekt wie erwartet mit einer auth Eigenschaft zurück. Jedoch erscheint gapi.authundefined.

Wenn ich die Funktion mache, warte zwei Sekunden, obwohl es wie erwartet ausgeführt wird. Dies veranschaulicht, was passiert:

enter image description here

jedoch alle Eigenschaften gibt es auch in dem ersten Objekt:

enter image description here

Warum die späteren eine Vorschau und die früheren nicht ? Ich könnte mir vorstellen, dass dies damit zusammenhängt, warum ich erst nach 2 Sekunden auf ihre Eigenschaften zugreifen kann.


UPDATE:

ich diesen Kontrolleur an der Spitze von meinem Skript hinzugefügt haben, zu warten, gapi.auth zu laden ... aber es endet nie:

while (gapi.auth === undefined) { 
    console.log("Still undefined"); 
} 
console.log(loaded now"); 

enter image description here

+0

Ich bin mir nicht ganz sicher, ob ich Ihre Frage verstehe. Aber die Bibliothek wird keine Authentifizierungsinformationen anfordern, bis Sie tatsächlich eine Anfrage gegen die API stellen, und die API wird einige Sekunden brauchen, um zu antworten. – DaImTo

+0

Meine Frage ist, warum die gapi.auth zunächst als undefiniert, wenn Gapi eindeutig eine Auth-Eigenschaft hat – Aron

+0

Ist es? [jsfiddle] (https://jsfiddle.net/orpcmt8e/) –

Antwort

0

Die Funktion console.log wertet das als Argumente angegebene Objekt nicht sofort aus. Es wird nur ausgewertet, wenn Sie das Objekt im Protokollfenster anzeigen oder erweitern. Also, wenn Ihr Objekt seine Eigenschaften nach der Zeit ändert. Sie sehen den Snapshot des Objekts, wenn Sie das Protokoll zum ersten Mal öffnen und versuchen, das Objekt zu erweitern. Wenn Sie es zu früh öffnen, sehen Sie ein leeres Objekt.

+0

Kannst du einen Hinweis darauf geben, was du gesagt hast? – v7d8dpo4

+0

Aber das erklärt nicht, warum, wenn ich eine while-Schleife erstellen, um zu überprüfen, dass gapi.auth === undefiniert es nie endet. – Aron

+0

Da gapi.auth beim Beenden der while-Schleife initialisiert wird. Tatsächlich wird gapi.auth asynchron geladen. Eine asynchrone Funktion kann erst ausgeführt werden, wenn Sie von Ihrer Funktion die Kontrolle an das System abgeben. Sie müssen wissen, wie die Java Script-Ereigniswarteschlange funktioniert. –

Verwandte Themen