2017-04-19 8 views
1

を追加する場合:角度2回の観察可能休憩私は、次のログイン機能を持つコールバック・ロジック

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

2番目のマップを追加すると、観測可能な応答はもはやログインコンポーネントのサブスクリプションに返されなくなります。前もって感謝します。

+1

2番目のマップにreturn文がありますか?中かっこ表記を使用しているので、前のより単純なものと同じように、その関数からの自動復帰はありません。 – FraserES

答えて

0

演算子 'do'を使用する必要があります。私の投稿の$ qに精通しているangularJS開発者の基本的なrxjs演算子を読むことができます。 $Q map to RxJS

0

1つ以上のことを行いたい場合は、約束を使用できます。

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

解決されました。私は2番目のマップ関数で結果を返していませんでした。 (私の額を叩く!)

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')); 
    } 
関連する問題