8

ユーザーがサインインしているかどうかを確認しようとしていますが、ある種の競合状態が関係しているように見える非常に一貫性のない結果が得られます。私は基本的にコードGoogle Developer Websiteを取りました:

gapi.load('auth2', function() {
  auth2 = gapi.auth2.init({
    client_id: 'my_client_id.apps.googleusercontent.com',
  });

  console.log(auth2.isSignedIn.get());

  setTimeout(function(){console.log(auth2.isSignedIn.get())},50);

  setTimeout(function(){console.log(auth2.isSignedIn.get())},500);

  setTimeout(function(){console.log(auth2.isSignedIn.get())},1000);
});

何らかの理由で、最初の 2 つは false を返し、2 番目は true を返します。私は再確認しましたが、サインインしているので、最初の 2 つは true を返すはずです。私は彼女に何が欠けていますか?ドキュメンテーションを確認しましたが、何か非同期が発生していることを示すものは何もないように見えisSignedInます。呼び出しから信頼できる結果を得る前に、何を待機する必要があるのか​​ わかりません。

4

1 に答える 1

24

ドキュメントのどこかで見逃したのかもしれませんが (もしそうなら、誰かが指摘してくれたらうれしいです)、Promises を使用して GoogleAuth インスタンスの準備ができていることを確認できるようです。一貫した結果を得るために私がしたことは次のとおりです。

gapi.load('auth2', function() {

  gapi.auth2.init({

    client_id: 'my_client_info.apps.googleusercontent.com',

  }).then(function(){

    auth2 = gapi.auth2.getAuthInstance();
    console.log(auth2.isSignedIn.get()); //now this always returns correctly        

  });
});
于 2015-10-28T00:28:46.267 に答える