添加回调逻辑时,Angular 2 Observable中断

时间:2017-04-19 23:24:21

标签: 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(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'));
  }

当我添加第二个映射时,observable响应不再返回到登录组件上的subscribe。提前谢谢。

3 个答案:

答案 0 :(得分:1)

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

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'));
  }

答案 1 :(得分:0)

你需要使用运算符'do'你可以在我的帖子中阅读熟悉$ q的angularJS开发人员的基本rxjs运算符。 $Q map to RxJS

答案 2 :(得分:0)

如果你想做多件事,你可以使用承诺。

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');
}