等待Angular中的http请求

时间:2018-06-04 09:10:51

标签: javascript angular typescript http

我正在编写一个Angular应用程序。我有一个服务,提出这样的http请求:

export class PingService {

  constructor(
    private http: HttpClient) { }

  ping() {
    return this.http.get<{ip, type}>(this.apiRoutes.pingService);
  }
}

我在一个组件中调用此服务:

login(credentials) {
    this.invalidLogin = false;

    this.pingService.ping()
      .subscribe(data => {
        this.apiConfigService.changeNetwork(data.type);
      },
      error => {
        throw(error);
      });

    // MORE THINGS TO DO //

我想在执行pingService.ping()之前等待// MORE THINGS TO DO //完成。我该如何等待服务完成?

4 个答案:

答案 0 :(得分:1)

login(credentials) {
this.invalidLogin = false;

this.pingService.ping()
  .subscribe(data => {
    this.apiConfigService.changeNetwork(data.type);

    --> To here // MORE THINGS TO DO //
  },
  error => {
    throw(error);
  });

--> Move this    // MORE THINGS TO DO //

答案 1 :(得分:1)

login(credentials) {
    this.invalidLogin = false;

    this.pingService.ping()
      .subscribe(data => {
        this.apiConfigService.changeNetwork(data.type);
        this.doMoreThings();
      },
      error => {
        throw(error);
      });
}

doMoreThings() {
  console.log('I am doing more things');
}

答案 2 :(得分:0)

不推荐使用Javascript进行同步,尤其是在进行http请求时。人们写的方式是最好的方法。

答案 3 :(得分:0)

我想补充一些其他答案。

大多数情况下,您不应该在任何JavaScript应用程序中“等待http请求”,因为它可能会阻止UI。想象一下,当连接丢失或网络不良时,您的用户会对您的应用执行某些操作。这将导致UI被阻止,直到请求结束或超时,这是非常糟糕的经历。