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
  }
});