返回catch方法中的值,而不是void |值



我正在使用一个服务来进行所有类似的Web请求:

@Injectable({
providedIn: 'root'
})
export class WebService {
auth_token: string;
constructor(public config: ConfigService, public http: HttpClient, public router: Router) {
// load token
this.auth_token = localStorage.getItem("token") ? localStorage.getItem("token") as string : "";
}
public async get<T>(dir: string) {
return await this.http.get<T>(this.config.config.backend.url + dir, { headers: { 'Authorization': `Bearer ${this.auth_token}`, 'Content-Type': 'charset=UTF-8' } }).toPromise();
}
}

然后,在组件中,我做的是:

constructor(web: WebService) {
web.get<MyObject[]>("obj").then(values => {
for(let obj of values) {
obj.doSomething();
}
});
}

我想更全局地管理错误,不必重复代码。主要是为了防止错误的令牌/过期的令牌等。

所以,我把我的服务编辑成这样:

public async get<T>(dir: string) {
return await this.http.get<T>(this.config.config.backend.url + dir, { headers: { 'Authorization': `Bearer ${this.auth_token}`, 'Content-Type': 'charset=UTF-8' } }).toPromise().catch(err => {
// here manage all err status code
});
}

但是catch方法返回Promise<void | T>而不是Promise<T>。因此,我在then()方法上有错误,因为values变量可能是void。准确错误为:Type 'void | MyObject[]' is not assignable to type 'MyObject[]'.

我该怎么修?

在catch中返回一个值。例如,当获取列表时,它可以是一个空数组。

.catch(err => {
// here manage all err status code
return [];
}

然而,在这种情况下,如果Promise的默认值是空数组、空字符串、零或任何,则需要预先定义