嗨,我在本地变量中存储值有问题。可能是同步/异步功能订阅出现问题。
POST请求:
existUser(username) {
return this.http.post(`${API_URL}/existuser`, username);
}
功能:
onSubmit() {
this.basicAuthenticationService.existUser(this.registerForm.value.username).subscribe(
(data: boolean) => this.existuser = data;
);
//this console log is undefined(empty)
console.log(this.existuser);
控制台日志未定义(空),如何将数据保存到本地变量。谢谢
答案 0 :(得分:0)
您可能想尝试将async / await添加到onSubmit函数中,以获得所需的行为。例如:
async onSubmit() {
this.existUser = await this.basicAuthenticationService.existUser(this.registerForm.value.username).toPromise();
console.log(this.existuser);
}
这可以通过将您的可观察对象转换为一个承诺,并在继续之前等待该承诺的响应。
我还要补充说,可观察性非常强大,如果您打算将Angular用于大型应用程序,我强烈建议您完全理解它们。
答案 1 :(得分:0)
是的,是的,它与异步调用有关。
解决这种情况的方法很少。
最简单的方法是在内部使用变量进行订阅。您可以在此处清除存储空间或在另一个链接上导航用户。喜欢:
onSubmit() {
this.basicAuthenticationService.existUser(this.registerForm.value.username).subscribe(
(data: boolean) => {
this.existuser = data;
// WORK HERE WITH DATA
// local Storage cleaning
// navigation to login page
});
第二个变体,如果您需要启动另一个http调用,则只需使用pipe和switchMap / mergeMap / concatMap运算符就可以完成流中的所有操作。
this.basicAuthenticationService.existUser(this.registerForm.value.username)
.pipe(switchMap(data) => {
return nextHttp.call()
})
.subscribe(....)