angular - Returnera värden och inte void|värden från catch-metoden
Jag använder en tjänst för att göra alla webbförfrågningar på det här sättet:
@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();
}
}
Sedan, i komponenten, gör jag så här:
constructor(web: WebService) {
web.get<MyObject[]>("obj").then(values => {
for(let obj of values) {
obj.doSomething();
}
});
}
Jag vill hantera fel mer globalt, för att slippa duplicera kod. Det är mest för att förhindra felaktig token/utgången token/etc.
Så, jag redigerade min tjänst för att ha något liknande detta:
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
});
}
Men catch-metoden returnerar Promise<void | T> och inte Promise<T>. Så jag får ett fel på then()-metoden eftersom values-variabeln kan vara void. Exakt fel är: Type 'void | MyObject[]' is not assignable to type 'MyObject[]'.
Hur kan jag fixa det?
Svar #1
Returnera ett värde i catch. Det kan till exempel vara en tom array när man hämtar en lista.
.catch(err => {
// here manage all err status code
return [];
}
Men du behöver definiera i förväg i det fallet om standardvärdet för Promisen är en tom array, en tom sträng, noll eller vad som helst
