Angular 添加回调逻辑时,角度2可观察到的中断

Angular 添加回调逻辑时,角度2可观察到的中断,angular,Angular,我有以下登录功能: login(payload: Object) { return this.http.post(this.apiUrl, payload) .map(res => res.json()) .catch((error: any) => Observable.throw(error.json().error || 'Server error')); } 我在登录时这样称呼它,它工作正常: this.sk_auth.login(th

我有以下登录功能:

 login(payload: Object) {
    return this.http.post(this.apiUrl, payload)
      .map(res => res.json())
      .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
  }
我在登录时这样称呼它,它工作正常:

this.sk_auth.login(this.loginCreds).subscribe((response)=>{
      console.log(response);
      //here we can do anything we want with the response.
     if(response.success){
       sessionStorage.setItem('token', response.token);
       sessionStorage.setItem('user', JSON.stringify(response.user)); 

    });
问题是我需要在返回响应之前做些什么。我试过这个:

login(payload: Object) {
    return this.http.post(this.apiUrl, payload)
      .map(res => res.json())
      .map((res)=>{
         //do some stuff...
      })
      .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
  }

当我添加第二个映射时,可观察的响应不再返回到登录组件上的订阅。提前感谢。

您需要使用操作符“do”,您可以在我的帖子中阅读熟悉$q的angularJS开发者的基本rxjs操作符

如果你想做不止一件事,你可以使用承诺

login(payload: Object) {
    return this.http.post(this.apiUrl, payload)
        .toPromise()
        .then(this.extractData)
        .then(this.doSomeStuff)
        .catch(this.handleError);
}
private extractData(res: Response) {
  let body = res.json();
  return body || [];
}
private doSomeStuff(body: any) {
  //do some stuff...
  return theStuff;
}
private handleError(error: any) {
  Observable.throw(error.json().error || 'Server error');
}

问题解决了。我没有在第二个map函数中返回结果。(拍我的额头!)


您确定在第二个映射中有return语句吗?由于您使用的是花括号表示法,因此该函数不会像以前更简单的函数那样自动返回。
login(payload: Object) {
    return this.http.post(this.apiUrl, payload)
      .map(res => res.json())
      .map((res)=>{
         //do some stuff...
         return res;
      })
      .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
  }