【发布时间】:2017-06-11 22:19:19
【问题描述】:
在我的 Angular 应用程序中,我有以下登录方法:
login(username, password): Observable<User> {
let data = new URLSearchParams();
data.append('username', username);
data.append('password', password);
const url = 'https://server.com/some-endpoint/';
return this.http.post(url, data)
.map(res => res.json())
.map(json => throwUnlessLoginSuccessful('properties', json))
.map(json => new User().deserialize(json));
}
所以我想对响应执行以下操作:
- 将响应转换为 JSON
- 检查 JSON 并检查正确的响应代码并引发错误。
- 如果这一切正常,则将 json 解析为我的用户对象。
这是我的throwUnlessLoginSuccessful 方法:
private throwUnlessLoginSuccessful(string: string, json: Object) {
if (Number(json["responseCode"]) > 0) {
console.warn("Sign in failed");
return Observable.throw(new Error(json['responseCodeMessage']));
}
return json;
}
这就是我在 UI 中使用登录服务的方式:
this.loginService.login(this.login.username, this.login.password).subscribe(
user => {
this.session.login(this.login.username);
console.log(`Signed in with ${user.username}`);
this.navCtrl.setRoot(TabsPage);
},
err => {
console.log(`Sign in failed $\{err}`)
this.loading.dismiss();
console.log(err);
},
() => console.log('Completed')
);
结果
- 我使用错误的用户名登录,并按预期收到错误“登录失败”。奇怪的是没有显示“已完成”消息。
- 现在,如果我使用错误的用户名再次登录,应用会崩溃,并且我会收到
username不可用的错误消息。
为什么第一次没有执行“已完成”?如果我使用错误的凭据重复登录,为什么行为会有所不同?
【问题讨论】:
标签: angular typescript ionic-framework rxjs