null zurück Ich stehe mit Ionic Storage vor einem sehr seltsamen Problem. Ich habe eine Methode, die einen Wert aus dem Speicher liest und gibt ein Versprechen ein Objekt enthält, das dem entspricht:Ionischer Speicher "Get" gibt nur bei dem zweiten Aufruf in Methode
private getAuthorizedOptions(): Promise<RequestOptions>
{
return this._storage.get('bdAccessToken')
.then(v => {
console.log("access token: ", v);
let token = v;
let header = new Headers({
'Authorization': 'Bearer ' + token
});
let ro = new RequestOptions({
headers: header
});
let options = new RequestOptions();
if (options.headers) options.headers.delete("Authorization");
options.headers = header;
return options;
});
}
Jetzt habe ich eine andere Methode, die dieses obige Verfahren rufen zweimal innerhalb einer Kette von Aktionen:
get(url:string, options?:RequestOptions): Observable<Response>
{
return Observable.fromPromise(this.getAuthorizedOptions())
.mergeMap((options) =>
{
return super.get(url, options)
.catch(err => {
if (err && err.status === 401)
{
return this._authService.refreshToken()
.mergeMap(r =>
{
return Observable.fromPromise(this.getAuthorizedOptions())
.mergeMap(opt => {
return super.get(url, opt)
});
}
)
.catch(err2 => {
console.log("redirecting.");
this.redirect();
return Observable.throw(err2);
});
}
else {
return Observable.throw(err);
}
});
});
}
Jetzt verfolgt diese Methoden etwas seltsames. Wenn die Methode "getAuthorizedOptions()" das erste Mal aufgerufen wird, kann sie den Wert "bdAccessToken" aus dem Speicher sehr gut lesen. Beim zweiten Aufruf ist der zurückgegebene Wert NULL.
Ich habe meine Haare für zwei Tage auf diese ziehen, jede Hilfe wird geschätzt, wie Sie noch nie zuvor geschätzt worden! lol!
Dank sehen kann hilfst du mir vielleicht, einen Interceptor zu schreiben (der ein Access-Token aktualisieren kann), indem ich ionischen Speicher verwende? Ich habe die gleiche Sache vollständig mit localStorage entwickelt und funktioniert, aber ich bin stecken in die Arbeit mit einem asynchronen Speicher. –
@behroozdalvandi - Ich wollte mehr in Interceptors innerhalb des Angular-Stacks suchen, bin aber noch dazu gekommen. Ich weiß, Angular University hat eine PDF, die Interzeptoren abdeckt. – JGFMK