2015-10-27 22 views
2

我試圖檢查用戶是否登錄或者不是,但我得到的結果似乎有一些不一致的競爭條件。我基本上採取了代碼Google Developer Website谷歌登錄API:isSignedIn.get()返回不一致的值

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); 
}); 

出於某種原因,前兩回假,第二個返回true。我有雙重檢查,並且我登錄,所以看起來前兩個應該返回true。我在想她嗎?我查看了文檔,似乎沒有任何內容表明發生了異步事件,我不確定在isSignedIn調用中獲得可靠結果之前應該等待什麼。

回答

11

也許我在文檔的某個地方錯過了它(如果我這樣做了,如果有人能指出我的話會更好),但看起來您可以使用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   

    }); 
});