我想尽办法找出Angular 6应用程序中做错了什么。下面的代码的问题是它“应该”工作,但是我的角度应用程序只是停止并且不会继续。
请注意,我所有其他API调用和类似代码都可以正常工作。
我已在控制台日志中添加了一些信息,以试图找出正在发生的事情:
我有一个正在提交的表格:
submit(f) {
console.log('2')
// Now I'm saving the data, this works
this.userService.completeProfile(this.model)
.pipe(first())
.subscribe(
data => {
console.log('3')
// this is to get a new token
this.authService.getNewToken(this.model.id)
.pipe(first())
.subscribe(() =>
data => {
// I never get to 8
console.log('8')
this.router.navigateByUrl('/register/profile/complete');
},
error => {
console.log('9')
}
);
},
error => {
console.log('10')
});
}
这是我的身份验证服务:
private currentUserSubject = new BehaviorSubject<LoggedInUser>({} as LoggedInUser);
currentUser = this.currentUserSubject.asObservable();
setCurrentUser(): void {
if (localStorage.getItem("auth_token")) {
let jwtData = localStorage.getItem("auth_token").split('.')[1]
let decodedJwtJsonData = window.atob(jwtData)
let decodedJwtData = JSON.parse(decodedJwtJsonData)
this.currentUserSubject.next(
{
name: decodedJwtData.name,
id: decodedJwtData.id,
}
);
}
}
getNewToken(id: String) {
return this.http.post<any>(this.baseUrl + '/GetNewToken', { id: id })
.pipe(map(user => {
console.log(user)
if (user && user.auth_token) {
console.log("4")
//localStorage.setItem('auth_token', user.auth_token);
console.log("5")
//this.setCurrentUser();
console.log("6")
}
console.log("7")
return user;
}));
}
控制台输出在7点停止
答案 0 :(得分:2)
我认为您的subscribe(...)
实现错误。它的参数是发生相关事件时立即被调用的函数(下一个,错误,完成),但是您传递的函数返回的对象带有data
和error
内部函数,这些对象将永远不会被调用
尝试像这样更改部分:
this.authService.getNewToken(this.model.id)
.pipe(first())
.subscribe(data =>
{
// I never get to 8
console.log('8')
this.router.navigateByUrl('/register/profile/complete');
},
error => {
console.log('9')
}
);