2

GoogleアナリティクスAPIをAngularで使用しようとしています。私はその後、APIスクリプトが作成されますconsole.logグローバル変数gapiことさまざまな時期にChromeでオブジェクトの記録が異なるのはなぜですか?

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

最初の分析スクリプトをロードします。 authプロパティで、これは私が期待しているオブジェクトを返します。しかし、gapi.authundefinedと表示されます。

期待どおりに動作しますが、機能を2秒間待機させるとします。これは、何が起こるかを示しています。

enter image description here

は、しかし、すべてのプロパティでも第一の目的であります。

enter image description here

なぜ、後に1がプレビューを持っており、それ以前の1にはないん?私はこれがなぜ2秒後にそのプロパティにしかアクセスできないのかと関係していると思います。


UPDATE:私はgapi.authがロードされるのを待つために私のスクリプトの先頭にこのチェッカーを追加した...しかし、それは決して終了しない

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

enter image description here

+0

私はあなたの質問をよく理解していません。しかし、実際にapiに対してリクエストを行うまで、libは認証情報を要求しません。apiは応答するまでに数秒かかるでしょう。 – DaImTo

+0

私の質問は、gapiが明らかにauthプロパティを持っているとき、gapi.authが最初に未定義として記録する理由です。 – Aron

+0

ですか? [jsfiddle](https://jsfiddle.net/orpcmt8e/) –

答えて

0

console.log関数は引数として与えられたオブジェクトを直ちに評価しません。ログウィンドウでオブジェクトを表示または展開した場合にのみ評価されます。だからあなたのオブジェクトが時間によってプロパティを変更した場合。最初にログを開いてオブジェクトを展開しようとすると、オブジェクトのスナップショットが表示されます。そのため、あまりにも早く開くと、空のオブジェクトが表示されます。

+0

あなたは言ったことへの参照を与えることができますか? – v7d8dpo4

+0

しかしそれはなぜ私がwhileループを作成してgapi.auth ===未定義であることを確認するのかを説明するものではありません。 – Aron

+0

whileループを終了すると、gapi.authが初期化されるためです。実際にはgapi.authは非同期にロードされます。非同期関数は、関数からシステムへの制御を放棄するまで実行できません。 Javaスクリプトイベントキューの仕組みを知る必要があります。 –

関連する問題