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