Angular2 - 条件语句中的Promise

时间:2017-06-08 14:47:35

标签: javascript angular typescript promise angular2-template

我需要等待服务器的回答才能说明电子邮件是否已被拍摄。但是我正在努力同步这个。在我的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){...}
   ..
 }

1 个答案:

答案 0 :(得分:0)

您无法将异步调用转换为同步调用。

您有两种选择:移动需要在then回调中完全使用结果值的代码:

 checkPersonalInfos() 
 {
   this.isEmailAvailable().then(isAvailable => {
       if (isAvailable) { ... }
   }
 }

或使用async / await语法使其看起来像同步代码,但请记住它仍然是异步的,因此其他代码将在await期间运行并且如果您返回结果从函数中它将被包装在Promise()

 async checkPersonalInfos() 
 {
   if (await this.isEmailAvailable()) { ... }
   ...
 }

你实际上并不需要你的isCorrectEmail()函数,因为它对结果一无所知,但是如果它做了一些更复杂的事情,那么它实际上是需要的,那么它必须返回{{1 }}:

Promise
相关问题