Google登录API:isSignedIn.get()返回不一致的值

时间:2015-10-27 21:21:26

标签: google-api google-signin google-identity

我正在尝试检查用户是否已登录,但我得到的结果确实不一致,似乎涉及某种竞争条件。我基本上接受了代码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);
});

由于某种原因,前两个返回false,第二个返回true。我已经双重检查,我已登录,所以看起来前两个应该返回true。我想念她的是什么?我看过文档,似乎没有任何东西表明发生了异步,我不确定在从isSignedIn调用中获得可靠结果之前我应该​​等待什么

1 个答案:

答案 0 :(得分:15)

也许我在某个地方的文档中错过了它(如果我这样做,如果有人能指出我就好了),但看起来你可以使用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        

  });
});