我有一个脚本来验证要在应用初始化期间关闭的用户,因此我在APP_INITIALIZER
中提供了app.module
。它发出一个HTTP调用,该调用通过两个switchMaps
运行,然后转换为Promise。 HTTP调用有效,然后第一个switchMap触发一次,然后第二个switchMap无限触发并锁定应用程序。我无法弄清楚发生了什么,也无法弄清楚如何调试它。它在某个时候起作用了,我不确定是什么改变打破了它。
以下是返回到APP_INITLIZER
的方法:
validateUser() {
let jwt = this.getJWT();
if (jwt && jwt.length) {
return this.api
.get<{ data: { tokenValid: boolean } }>('/users/validateToken', { token: jwt })
.pipe(
switchMap(response => {
if (response.data.tokenValid) {
this.setUser()
return this.currentUser$.asObservable()
} else {
return ObservableOf(false);
}
}),
switchMap(currentUser => {
if (currentUser) {
currentUser.getEvents();
this.setCurrentUser(currentUser);
} else {
this.logout()
}
return ObservableOf(true);
})
)
.toPromise();
}
return Promise.resolve(true);
}
currentUser$
是重要的行为主题。
答案 0 :(得分:0)
您在第一个SwitchMap中返回mkdirp
。
然后,您从第二个SwitchMap glob
更新当前用户。
这将导致可观察到的第一个SwitchMap内部发出一个新值。因此它会无限期地运行。
虽然我认为您的代码可以改进,但是最简单的解决方案是更改一行。
this.currentUser$.asObservable()