8

我正在尝试检查用户是否已登录,但我得到的结果非常不一致,似乎涉及某种竞争条件。我基本上拿了代码谷歌开发者网站

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调用中获得可靠结果之前我应该​​等待什么。

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 回答