0
私はangleの購読を使用してhttpリクエストを作成することに新しいので、可能かどうかわかりません(ただし、約束で1度作った) 私は、nativescriptアプリで、角度HttpClient私の独自のインターセプターで、私はhttps://angular.io/guide/http#intercepting-all-requests-or-responsesのように2番目のHttpClientでネストされたリクエスト
のトークンが得られます。私は401の応答を受け取り、新しいログイン要求を行い、新しいトークンで再度要求をやり直します。私はかつてのような(カスタムサービスで)約束を使用してそれを実現
...
next.handle(newRequest)
.catch((response: HttpErrorResponse) => {
if (response.status === 401) {
return next.handle(new HttpRequest("POST", loginUrl, credentials))
.subscribe((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
BackendService.token = event.body.token;
return next.handle(newRequest).subscribe();
}
})
);
}
return Observable.throw(response);
})
:
はので、私はこのようなsomethink(動作しない)を作っ
request.catch((response: HttpErrorResponse) => {
if(response.status === 401) {
return http.post(loginUrl, credentials)
.then(response => {
return requestWithNewToken;
}, error => {
... redirect UI to login -> login with saved credentials failed
})
}
})
私が対処したいと思いますインターセプタを介してすべてがサービスのinsted。
あなたはnext.handle戻り、そこにいくつかのparamsを渡します。それは間違っているかもしれない。私はObservableを返す必要があると思います。余分なリクエストをして、それをmergeする必要があります。それをnext.handleにマッピングしてください。 'のようなもの' return this.http.post( 'get-new-token'、someData).mergeMapTo(next.handle(response)) ' –
' next.handle'は 'Observable'を返します。問題は私が毎回両方のリクエストを 'mergeMapTo'したいのではなく、最初にリクエストを試して失敗した場合(トークンが期限切れになっている)、それを返す(ログイン要求と新しいトークンで同じリクエスト) – wendt88
"失敗した場合"です。うんつまり、あなたのコードを '.catch'に入れるのです。この場合、次のようになります。return next.handle(req).mergeMap((data)=>エラーの場合はthis.http.post( 'get-new-token'、someData).mergeMapTo(next.handle(response) )else else Observable.throw(request))。subscribe() ' –