Vin*_*ade 0 json promise asp.net-web-api ionic3 angular
我正在使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个提供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);
});
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的register.ts代码:
validate()
{
let validEmail;
validEmail= this.checkEmail();// I WANT THAT the "validEmail" receives returned value before continue.
return true;
}
Run Code Online (Sandbox Code Playgroud)
而最后一件事是我的职责,它将向提供者打电话:
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");
});
}
Run Code Online (Sandbox Code Playgroud)
提前致谢..
getData(data,func)
{
this.http.get(apiUrl+func, {params:data})
.map(res => {
return res.json();
})
.toPromise();
}
Run Code Online (Sandbox Code Playgroud)
或使用异步/等待
async getData(data,func)
{
let result = await this.http.get(apiUrl+func, {params:data})
.toPromise();
return result.json();
}
Run Code Online (Sandbox Code Playgroud)
现在使用validate函数:
async validate()
{
let validEmail;
await this.checkEmail();
return true;
}
Run Code Online (Sandbox Code Playgroud)
关键是您不能从同步功能跳到异步或反之亦然。验证需要返回一个promise / observable,因为它执行异步功能。
| 归档时间: |
|
| 查看次数: |
6872 次 |
| 最近记录: |