javascript - Angular 的最佳实践
问题描述
我刚刚完成了我的 Angular 课程,我已经发现了我所学的内容与 Angular 官方文档之间的一些差异。
假设我想恢复一个具有 API ID 的用户。
以下是我将如何根据我的课程做的:
export class UserService {
constructor(
private httpClient: HttpClient
) {
}
public user: User; // local variable using User model
public userSubject: BehaviorSubject<User> = new BehaviorSubject<User>(null);
async getSingleUserFromServer() {
await this.httpClient.get<any>('https://xvalor.repliqa.fr/api/v1/user/' + this.userId).subscribe(
(response) => {
this.user = response;
this.userPortfolios = this.user.portfolioAssoc;
this.emitSubjects();
});
}
emitSubjects() {
this.userSubject.next(this.user);
}
}
这是角度文档的处理方式
getHeroes (): Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
.pipe(
tap(_ => this.log('fetched heroes')),
catchError(this.handleError<Hero[]>('getHeroes', []))
);
}
我知道这两种方法都安静地做同样的事情,我只是想确定我应该使用哪一种,尤其是在大型项目开发中。
解决方案
我会坚持第二种方法,因为它更通用并且使用Observable
. Observale 允许发出任意数量的事件,并且将为每个事件调用回调。Promise 在完成后生成单个事件。
另外,服务类不应该有async
和await
部件。服务的目标是返回数据,UI组件可以使用async
和部件来消费数据await
。async
并且await
是语法糖以避免编写.subscribe
部分,因为它真的很冗长。所以在你的 UI 组件中编写async
和。await
如果您想使用Promise
,那么您的服务不应包含subscribe
以下部分:
getSingleUserFromServer() {
return this.httpClient.get<any>('https://xvalor.repliqa.fr/api/v1/user/' + this.userId);
}
但是,最好Observables
从您的服务中返回。
推荐阅读
- python - sphinxcontrib.programoutput 在本地工作,在 ReadTheDocs 上不起作用
- kubernetes - Heketi:在 kubernetes 环境中出现 401 Unauthorized
- node.js - 在 nodejs 博客应用程序中仅发布一次请求
- python - 将熊猫数据框与空数据框合并
- android - JSON 数据同时包含 Object 和 Array
- angularjs - AngularJS节点mongodb auth问题使用令牌auhenticaton
- joomla - Joomla Offcanvas 菜单错误
- android - 房间迁移:测试仪器过程崩溃
- c++ - 禁止列移动到索引 0?
- angular - 有没有办法从 ngx-editor 获取文本?