2015-10-27 5 views
2

Я пытаюсь проверить, был ли пользователь подписан или нет, но я получаю действительно противоречивые результаты, которые, похоже, связаны с каким-либо условием гонки. Я в основном взял код Google Developer Website:API входа в Google: 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); 
}); 

По какой-то причине, первые два возвращение ложным, а второй возвращает истину. Я проверил дважды, и я вошел в систему, так что кажется, что первые два должны возвращаться. Что я скучаю по ней? Я просмотрел документацию, и, похоже, не было ничего, что указывало бы на что-то асинхронное, и я не уверен, чего я должен ждать, прежде чем я получу надежный результат из вызова isSignedIn.

ответ

11

Возможно, я где-то пропустил его в документации (если бы это было так, было бы хорошо, если бы кто-нибудь мог указать мне на это), но похоже, что вы можете использовать обещания, чтобы убедиться, что экземпляр 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   

    }); 
});