Javascript Angular2-条件语句中的承诺
我需要等待我的服务器的回复,以说明电子邮件是否已被接收。但我正在努力使这同步。在我的if语句中,typescript说iscorrectmail()是一个void函数(我可以理解但无法解决)。有什么想法吗Javascript Angular2-条件语句中的承诺,javascript,angular,typescript,promise,angular2-template,Javascript,Angular,Typescript,Promise,Angular2 Template,我需要等待我的服务器的回复,以说明电子邮件是否已被接收。但我正在努力使这同步。在我的if语句中,typescript说iscorrectmail()是一个void函数(我可以理解但无法解决)。有什么想法吗 isEmailAvailable(){ return new Promise( (resolve, reject) => { this.authService.checkemail(this.user.email).then(result => {
isEmailAvailable(){
return new Promise( (resolve, reject) => {
this.authService.checkemail(this.user.email).then(result => {
let res = <any> result;
if (res.code == 0){
resolve(true);
}
else resolve(false);
}, (err) => {
reject(false);
});
});
};
isCorrectEmail(){
this.isEmailAvailable().then( (result) => { return result ; } );
};
checkPersonalInfos()
{
if ( this.isCorrectEmail() == true){...}
..
}
isEmailAvailable(){
返回新承诺((解决、拒绝)=>{
this.authService.checkemail(this.user.email)。然后(result=>{
设res=结果;
如果(res.code==0){
决心(正确);
}
否则解决(错误);
},(错误)=>{
拒绝(假);
});
});
};
iscorrectmail(){
this.isEmailAvailable().then((result)=>{return result;});
};
checkPersonalInfos()
{
如果(this.iscorrectmail()==true){…}
..
}
不能将异步调用转换为同步调用
您有两个选项:将需要使用结果值的代码完全移动到回调中,然后
回调:
checkPersonalInfos()
{
this.isEmailAvailable().then(isAvailable => {
if (isAvailable) { ... }
}
}
或者使用async
/await
语法使其看起来像同步代码,但请记住它仍然是异步的,因此其他代码将在await
期间运行,如果您从函数返回结果,它将被包装在Promise()
中:
实际上,您不需要在此处使用iscorrectmail()
函数,因为它对结果没有任何影响,但如果它执行了更复杂的操作,因此实际上需要它,那么它必须返回承诺
:
async checkPersonalInfos()
{
if (await this.isEmailAvailable()) { ... }
...
}
isCorrectEmail(): Promise<boolean> {
return this.isEmailAvailable().then(result => result);
};
iscorrectmail():承诺{
返回此.isEmailAvailable().then(result=>result);
};
避免出现错误!