Mit Angular 2 habe ich einen Dienst, der meine API-Aufrufe verarbeitet. Im Dienst habe ich eine HandleError-Funktion, die eine Promise<string>
für die Fehlermeldung zurückgibt. Ich versuche, dem handleError einige Funktionen hinzuzufügen, die die Seite anschließend zum Anmeldebildschirm umleiten, wenn Anmeldefehler vorliegen. Wenn ich das tue, löst TypeScript einen TS2322-Fehler aus, obwohl ich dasselbe Versprechen zurückgebe und dann versuche, einige Ketten daraus zu machen.angular2 TS2322 Typ 'Promise <void>' kann nicht dem Typ 'Promise <string>' zugeordnet werden, wenn eine Zeichenfolge angegeben wird
Fehler TS2322: Typ 'Versprechen <Leere>' ist nicht belegbar 'Versprechen <Zeichenfolge>' eingeben. Type 'void' ist nicht dem Typ 'string' zuweisbar.
private handleError(error: Error): Promise<string> {
let message = "Something went wrong loading data from the API.";
if (error.response.status === 0) {
message = "Unable to contact server. Please file a bug report.";
}
if (error.message) {
message = "API Service Error retrieving page: " + error.message;
}
this.alerts.error(message);
if (error.response.status === 403) {
if (error.message.indexOf("Authentication credentials") !== -1) {
return Promise.reject<string>(message) // this line errs with TS2322
.then(() => this.appState.refresh())
.then(() => this.redirects.login())
.then(() => this.alerts.warning("Redirected to login because no credentials found."));
} else {
this.redirects.index();
}
}
return Promise.reject<string>(message);
}
Keiner Ihrer 'then() 'Callbacks wird jemals ausgeführt, weil Ihr Versprechen abgelehnt wird. – SLaks