Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular2-条件语句中的承诺_Javascript_Angular_Typescript_Promise_Angular2 Template - Fatal编程技术网

Javascript Angular2-条件语句中的承诺

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 => {

我需要等待我的服务器的回复,以说明电子邮件是否已被接收。但我正在努力使这同步。在我的if语句中,typescript说iscorrectmail()是一个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){...}
   ..
 }
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);
};
避免出现错误!