Angular 2:如何检测HTTP请求的完成?

时间:2016-08-24 10:35:05

标签: angular typescript

我在Angular 2中跟随Http put请求:

...
...
private Url='api/demo/'    
UpdatState(obj: Model) {
        let headers = new Headers({
            'Content-Type': 'application/json',
        });
        return this.http.put(this.Url + obj.Id, JSON.stringify(obj), { headers: headers }).map(res => res.json().data).subscribe(..);
    }

和相同型号的获取服务:

 getState(){
  return this.http.get(this.Url)
        .map(response => response.json());        
}

问题: 我已经以这样的方式设置我的组件,即首先发出请求 - 这会在Db中更改我的表。紧接着,获取获取表条目的请求。但是,在Put请求完成之前,get完成其执行。

...
...    
onSomeEvent(){
    this.updatestate(obj);
    this.getState();
    }
...
...

如何检测我的http请求是否在Angular 2中完成?

修改: 从@Gunter的回答中,我提供了三个回调给我的订阅方法:

UpdatState(obj: Model) {
     let headers = new Headers({
     Content-Type': 'application/json',
     });
     return this.http.put(this.Url + obj.Id, JSON.stringify(obj), { headers: headers })
.map(res => res.json().data)
.subscribe(
    (a) => { this.b = a }, //b is my local array
    err => { this.error = err; }, //error is my local string variable
    () => { this.completed(); }
    );
}

我完成的方法是:

 completed(){
alert("Request completed");
}

1 个答案:

答案 0 :(得分:9)

您可以将三个回调传递给subscribe(...)

this.http.put(...).subscribe(
  value => this.doSomething(value), // called for each value
  error => this.handleError(err),
  () => this.completed()
})

当observable关闭时调用最后一个。因为http.xxx()总是只发出一个值然后关闭observable,所以第一个和最后一个几乎是相同的。

在任何情况下都会调用finally()运算符(成功和错误)。