【发布时间】:2017-10-23 23:46:18
【问题描述】:
使用 Angular 2,我有一个服务来处理我的 API 调用。在服务中,我有一个 handleError 函数,它为错误消息返回 Promise<string>。我正在尝试向 handleError 添加一些功能,如果出现凭据错误,它将在之后将页面重定向到登录屏幕。当我这样做时,TypeScript 会引发 TS2322 错误,即使我正在返回相同的 Promise,然后尝试从中执行一些链。
错误 TS2322:类型“Promise
”不可分配给类型 '承诺'。类型 'void' 不能分配给类型 'string'。
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);
}
【问题讨论】:
-
您的任何
then()回调都不会运行,因为您的承诺被拒绝了。
标签: javascript angular