読み込まれるとすぐに API エンドポイントを呼び出して、ユーザーが認証されているかどうかを確認するクライアント Web アプリがあります。そうでない場合は、ログイン内容が表示されます。ユーザーが認証されると、他の情報が表示されます。
この情報が返されるまで、何も表示したくありません。私の最初のアプローチは、同期呼び出しを使用することでしたが、これは正しいようです。しかし、この質問への回答に基づいて、それは間違ったアプローチのようです:
その場合、非同期処理を実行してから、データが返されるまで停止する必要があります。
次のような activate() 関数で呼び出しを行うためにノックアウトを使用しています。
var activate = function () {
// get auth data
authPayload(dataservice.getAuthPayload());
if (!authPayload().isAuthenticated) {
// do stuff
} else if (authPayload().isAuthenticated === true){
// do other stuff
}
getAuthPayload を使用:
var getAuthPayload = function () {
var options = {
async: false,
url: apiEndpoint + 'api/authpayload',
type: 'GET',
dataType: 'json'
};
return $.ajax(options)
.then(querySucceeded)
.fail(queryFailed);
};
ただし、現在これは同期的に実行されているため、activate
関数はサーバーから返されるのを待たないため、応答のデータを認識しません。アプリは現在、activate
関数が閉じるまでスピナーを表示しています。への電話を待つにはどうすればよいdataservice.getAuthPayload()
ですか?