Ionic 设置局部变量如果 Http 请求不 return null
Ionic set localvariable if Http Request doesnt return null
我有一个名为 users 的数据库 table,我想在添加行之前检查电子邮件是否存在。
我创建了一个名为 emailTaken 的局部变量并将其初始化为 0,并且我创建了一个函数,该函数执行 http get 请求以使用输入的电子邮件获取用户行(它确实 select * 来自 email=... 的用户),并且我订阅了返回的数据,然后如果返回的数据不为空,则意味着已经有人使用该电子邮件,我将我的本地变量设置为 1,但它没有改变,这是我的功能:
checkIfExistEmail(){
var tocheck;
var check = this.authServiceProvider.getData("userbymail/" + this.userData.email);
check.subscribe(
data => {
if(data != null){
this.emailTaken = 1;
console.log("inside function: "+this.emailTaken); // this is showing 1
}
},
err => {
console.error("Something went wrong", err);
})
}
这是 getData 函数:
public getData(type): Observable<any> {
return this.http.get(apiUrl + type);
}
我如何在我的注册页面中使用 checkIfExistEmail():
export class SignupPage {
.....
.....
.....
public emailTaken;
.....
.....
.....
goEtape2(){
this.emailTaken=0;
this.checkIfExistEmail();
console.log("email: "+this.emailTaken);// this is showing 0
}
当我调用 goEtape2 函数时,我在控制台中得到了这个
email: 0
inside function: 1
getData 是异步的。所以订阅块和 this.emailTaken = 1;
行在 console.log("email: "+this.emailTaken);
之后执行
你必须正确处理异步事件。
import "rxjs/add/operator/switchmap"
checkIfExistEmail(){
var tocheck;
var check = this.authServiceProvider.getData("userbymail/" + this.userData.email);
return check.switchMap(
data => Observable.of((data != null) ? true : false),
err => console.error("Something went wrong", err)
);
}
现在 checkIfExistEmail
也是可观察的,returns 是一个布尔值可观察值,告诉您电子邮件地址是否存在。订阅保证 if (emailTaken) ...
部分在收到 http 响应后执行。
this.checkIfExistEmail().subscribe((emailTaken) =>{
if (emailTaken){
// email is already in use
}else{
// go on
}
});
我有一个名为 users 的数据库 table,我想在添加行之前检查电子邮件是否存在。 我创建了一个名为 emailTaken 的局部变量并将其初始化为 0,并且我创建了一个函数,该函数执行 http get 请求以使用输入的电子邮件获取用户行(它确实 select * 来自 email=... 的用户),并且我订阅了返回的数据,然后如果返回的数据不为空,则意味着已经有人使用该电子邮件,我将我的本地变量设置为 1,但它没有改变,这是我的功能:
checkIfExistEmail(){
var tocheck;
var check = this.authServiceProvider.getData("userbymail/" + this.userData.email);
check.subscribe(
data => {
if(data != null){
this.emailTaken = 1;
console.log("inside function: "+this.emailTaken); // this is showing 1
}
},
err => {
console.error("Something went wrong", err);
})
}
这是 getData 函数:
public getData(type): Observable<any> {
return this.http.get(apiUrl + type);
}
我如何在我的注册页面中使用 checkIfExistEmail():
export class SignupPage {
.....
.....
.....
public emailTaken;
.....
.....
.....
goEtape2(){
this.emailTaken=0;
this.checkIfExistEmail();
console.log("email: "+this.emailTaken);// this is showing 0
}
当我调用 goEtape2 函数时,我在控制台中得到了这个
email: 0
inside function: 1
getData 是异步的。所以订阅块和 this.emailTaken = 1;
行在 console.log("email: "+this.emailTaken);
你必须正确处理异步事件。
import "rxjs/add/operator/switchmap"
checkIfExistEmail(){
var tocheck;
var check = this.authServiceProvider.getData("userbymail/" + this.userData.email);
return check.switchMap(
data => Observable.of((data != null) ? true : false),
err => console.error("Something went wrong", err)
);
}
现在 checkIfExistEmail
也是可观察的,returns 是一个布尔值可观察值,告诉您电子邮件地址是否存在。订阅保证 if (emailTaken) ...
部分在收到 http 响应后执行。
this.checkIfExistEmail().subscribe((emailTaken) =>{
if (emailTaken){
// email is already in use
}else{
// go on
}
});