何が起こっているのか:
FB.getLoginStatusメソッドは非同期で実行され、終了したら実行するためのコールバックを指定します。
コードではaccessToken
、非同期リクエストを発行した直後に戻りますが、完了するのを待っていません。
次のようになります。
FB.getLoginStatus(function (response) {
if (response.authResponse || response.status === 'connected') {
return response.authResponse.accessToken;
} else {
alert( response.status );
}
});
したがって、「そもそもなぜ機能するのか」と自問するかもしれませんが、答えは簡単です。ドキュメントに記載されているように、最初はsdkに認証データがあり、実際にfbサーバーにリクエストを送信する必要はありません。メソッドの:
Facebookのサーバーへの往復
アプリケーションのパフォーマンスを向上させるために、ユーザーのステータスを確認するためのすべての呼び出しがFacebookのサーバーへの要求につながるわけではありません。可能な場合、応答はキャッシュされます。現在のブラウザセッションで初めてFB.getLoginStatusが呼び出されるか、JD SDKがstatus:trueで初期化されると、応答オブジェクトはSDKによってキャッシュされます。その後のFB.getLoginStatusの呼び出しは、このキャッシュされた応答からデータを返します。
次のように、「true」を渡してコードを試す場合は、次のようになります。
var accessToken = "";
FB.getLoginStatus(function (response) {
if (response.authResponse || response.status === 'connected') {
accessToken = response.authResponse.accessToken;
} else {
alert( response.status );
}
}, true);
return accessToken;
その後、それはまったく機能しないはずです。