私のWeb-appからサービスに問い合わせると約束しています。トークンが無効な場合は、モーダルを使用してユーザーに資格情報を要求し、バックエンドからの新しいトークンを照会し、失敗した要求を再実行し、何も起こらないために続行するという私の最初の要求の約束の成功ブロックに戻る。角度エラー・インターセプタでモーダル・プロミスを待っています
私は401を捕まえるためのエラーインターセプターをセットアップし、資格情報を求めるモーダルを開きました。次に、既存のAuthServiceを使用してトークンを照会し、調整されたトークンで$ http(response.config)を返します。ここで
は私の最初の要求である:ここでは
MyService.getData().then(
function(result) {
console.log("process data");
}
, function(response) {
console.log("error occurred retrieving data");
}
);
は401Sに反応し、私のエラーインターセプタです:
Restangular.setErrorInterceptor(
function(response) {
if (response.status === 401) {
console.log("interceptor catches");
var modal = $uibModal.open({
templateUrl: "frame/view/Relogin.html",
controller: "ReloginController",
});
console.log("opened modal");
return modal.result.then(function(data) {
console.log("get new token");
return AuthService.authenticate(data[0], data[1]).then(
function (token) {
console.log("set new token");
},
function(){
console.log("failed getting new token");
})
.then(function() {
console.log("now rerun request");
return $http(response.config);
});
});
}
return $q.reject(response);
});
は今何が起こる、インターセプタは401をキャッチことで、モーダルを開きます。しかし、ユーザーの入力を待ってからバックエンドに新しいトークンを問い合わせるのではなく、プロミスのエラーブロックにアクセスするようになりました。
だから、コンソール出力は次のようになります。
interceptor catches
opened modal
error occurred retrieving data
get new token
set new token
now rerun request
しかし、私はそれになりたいと思った:私は約束を使用することに間違いがあるとし
interceptor catches
opened modal
get new token
set new token
now rerun request
process data
...誰かが助けることができますか?
ありがとうございます!