我需要等待服务器的回答才能说明电子邮件是否已被拍摄。但是我正在努力同步这个。在我的if语句中,typescript说isCorrectEmail()是一个void函数(我能理解但无法解决)。任何的想法?
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){...}
..
}
答案 0 :(得分:0)
您无法将异步调用转换为同步调用。
您有两种选择:移动需要在then
回调中完全使用结果值的代码:
checkPersonalInfos()
{
this.isEmailAvailable().then(isAvailable => {
if (isAvailable) { ... }
}
}
或使用async
/ await
语法使其看起来像同步代码,但请记住它仍然是异步的,因此其他代码将在await
期间运行并且如果您返回结果从函数中它将被包装在Promise()
:
async checkPersonalInfos()
{
if (await this.isEmailAvailable()) { ... }
...
}
你实际上并不需要你的isCorrectEmail()
函数,因为它对结果一无所知,但是如果它做了一些更复杂的事情,那么它实际上是需要的,那么它必须返回{{1 }}:
Promise