等待承诺完成服务

时间:2017-08-13 13:00:37

标签: angular promise

我有一个异步获取用户的服务,我需要从服务中获取用户,但只有在从服务器获取用户之后。是否有可能从我的服务中获取用户并等到用户被提取然后返回它?

这样的东西?

  1. 服务构造函数开始从服务器获取用户。
  2. 注入此服务的组件需要服务中的用户并且get()
  3. 服务仍在从服务器获取用户,所以此时需要延迟get()。不知何故。
  4. 服务完成提取用户,get()返回用户。
  5. 承诺可以做什么?

2 个答案:

答案 0 :(得分:1)

是的,你可以实现这样的方法:

userPromise;
constructor() {
     userPromise = http.get();
}

get() {
     return userPromise;
}

答案 1 :(得分:0)

Maximus's answer所述,这是可能的,但这不是Angular的做事方式。相反,您应该利用Observables和async pipe。

您的服务应该只返回一个Observable of users

@Injectable()
export class MyService {
  constructor(private http: HttpClient) {}
  getUsers = this.http.get(`my.api/users`)
}

在组件中注入此服务。如果您不需要对数据进行任何转换,只需在模板中使用async pipe即可。

<ol *ngFor="let user of myService.getUsers | async">
  <li>{{ user.name }}
</ol>

来自文档:

  

异步管道订阅ObservablePromise并返回它发出的最新值。发出新值时,async管道会标记要检查更改的组件。当组件被销毁时,async管道会自动取消订阅以避免潜在的内存泄漏。

如果您需要转换数据,可以使用the map operator from RxJS