javascript - Angular / Typescript - 无法更新订阅函数中的外部变量
问题描述
下面是我的代码,我只想查询后端是否已经注册了电子邮件,但是,无论我将什么电子邮件传递给 verifyEmail 函数,“已注册”变量始终为 false,如何根据后端响应?谢谢
export class MyClass {
registered: boolean = false;
message: string = ''
verifyEmail(email) {
this.registered= false
let verifyEmailUrl = "/backend/GetUserByEmail";
this.http.post(verifyEmailUrl, {
email: email
}).subscribe(
(data) => {
if (data["user"]) { // can find a user
this.message = 'This email has already been registered'
this.registered= true
}
});
}
解决方案
你如何检查注册价值?您无法在执行 verifyEmail 后立即获取此值,因为值会在一段时间后更新。您可以创建 BehaviorSubject 然后订阅它并在它更新时在任何地方获取注册值
export class MyClass {
registered$ = new BehaviorSubject<boolean>();
message: string = ''
verifyEmail(email) {
let verifyEmailUrl = "/backend/GetUserByEmail";
this.http.post(verifyEmailUrl, {
email: email
}).subscribe(
(data) => {
if (data["user"]) { // can find a user
this.message = 'This email has already been registered'
this.registered$.next(true)
} else {
this.registered$.next(false)
}
});
}
在外部代码中:
myClassObject.registered$.asObservable().subscribe(registered => console.log(registered));
推荐阅读
- python - 为什么我不能在 python 中用漂亮的汤刮 twitter?
- pandas - 在 DF #1 中查找零行并在 DF #2 中更改为零
- python - While 循环往两个方向前进 - 一直循环到两端
- node.js - 节点 Redis XREAD 阻塞订阅
- c++ - 保留名称和用户文字
- python - 我刚开始使用 python,我需要帮助在 python 中提出数学问题
- javascript - 显示加载器元素直到页面加载,然后隐藏它
- android - 如何从fire base android中的所有子nidra中删除特定密钥
- python - 没有多个页面的唯一 URL,没有发出 XHR 请求
- r - R - 在 for 循环中按顺序删除列