我正在尝试检查用户是否已登录,但我得到的结果确实不一致,似乎涉及某种竞争条件。我基本上接受了代码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
调用中获得可靠结果之前我应该等待什么
答案 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
});
});