我正在使用JSONPlaceholder API:https://jsonplaceholder.typicode.com。我的service.ts
:
public async getPosts(): Promise<Post[]> {
try {
const response = await this._http.get<Post[]>(this._baseUrl + "api/JsonPlaceholder/GetPosts");
return response.toPromise();
} catch (error) {
await this.handleError(error);
}
}
我尝试在component.ts
中使用
public posts: Post[];
public async ngOnInit() {
const posts = await this._placeholderService.getPosts();
this.posts = posts;
}
但是,TypeScript编译器会在public async getPosts(): Promise<Post[]>
- Function lacks ending return statement and return type does not include 'undefined'.
期望在catch块中或try-catch外部返回return语句。当我想要返回特定类型时,在我的情况Post[]
中处理这样的错误的最佳做法是什么。有没有更好的方法来构建这些类型的调用?
答案 0 :(得分:6)
handleError
做什么?当http请求失败时,您希望发生什么?现在你正在吞下错误并返回undefined
。您可以将返回类型注释修复为Promise<Post[] | undefined>
(或删除它将推断该类型),然后您需要处理上游代码中的undefined
案例:
public async ngOnInit() {
const posts = await this._placeholderService.getPosts();
if (posts) {
this.posts = posts;
} else {
this.errorMessage = "Failed to load posts!";
}
}
如果您还没有处理错误案例,那么您可以return []
:
} catch (error) {
await this.handleError(error);
return [];
}
或者您可以抛出错误并允许上游代码处理它:
} catch (error) {
await this.handleError(error);
throw error;
}
public async ngOnInit() {
try {
const posts = await this._placeholderService.getPosts();
this.posts = posts;
} catch(error) {
// Note that 'error' could be almost anything: http error, parsing error, type error in getPosts(), handling error in above code
this.errorMessage = "Failed to load posts!";
}
}
答案 1 :(得分:2)
期望在catch块中或try-catch外部返回return语句。当我想要返回特定类型时,处理这类错误的最佳做法是什么...在我的案例中发布[]。有没有更好的方法来构建这些类型的调用?
简单注释,以反映您编写的代码的真实性质:
{{1}}
TypeScript只是为你指出了这个事实