Angular 4等到http.get执行继续

时间:2018-01-12 11:21:01

标签: json angular asp.net-web-api promise ionic3

我正在使用Ionic创建一个新的注册表,并使用ASP.Net(C#)作为我的API。

我想在激活输入模糊事件时检查用户是否存在。

问题是我的代码不会等到服务器返回值才能继续。 我究竟做错了什么?有没有办法做到这一点?

这是我的API代码:

    [HttpGet]
    public JsonResult verifyEmail(string email)
    {
        var result = Domain.Repository.UserController.Find(email:email);
        if (result != null)
        {
            return Json(new { erro = true, message = "Email already registered!" }, JsonRequestBehavior.AllowGet);
        }
        else
        {
            return Json(new { erro=false,message = "Email is valid!" },JsonRequestBehavior.AllowGet);
        }
    }

我创建了一个提供HTTP请求的提供程序(authProvider):

   getData(data,func)
    {
        return  new Promise( (resolve,reject)=>{
          this.http.get(apiUrl+func, {params:data})  
          .subscribe(
           res=>{

            resolve(res.json());
          },
          async (err)=>{
            reject(err);

          });
        });
        }

这里是我的register.ts代码:

  validate()
  {
     let validEmail;
     validEmail= this.checkEmail();// I WANT THAT the "validEmail" receives returned value before continue.

     return true;
  }

最后一件事是我的功能,它将致电提供商:

  checkEmail()
  {
    return this.authService.getData({email:this.model.email},"Account/verifyEmail").then((result)=>{
      let response = <any>{};
      response=result;
      if(response.erro)
      {
        return response.message
      }else
      {
        return true
      }

    },(err)=>{
      this.toastService.presentToast("ERROR:"+err,"bottom",undefined,"toast-error");
    });
  }

提前致谢..

1 个答案:

答案 0 :(得分:3)

 getData(data,func)
    {
          this.http.get(apiUrl+func, {params:data})  
          .map(res => {
            return res.json();
          })
         .toPromise();
    }

或使用async / await

 async getData(data,func)
    {
     let result = await this.http.get(apiUrl+func, {params:data})  
         .toPromise();
       return result.json();
    }

现在验证功能:

  async validate()
  {
     let validEmail;
     await this.checkEmail();
     return true;
  }

点是你不能从同步功能跳到异步,反之亦然。 验证需要返回promise / observable,因为它执行异步函数。