我有以下登录功能:
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。提前谢谢。
答案 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');
}