【问题标题】:Angular2 - Promise inside a conditional statementAngular2 - 条件语句中的承诺
【发布时间】:2017-06-08 14:47:35
【问题描述】:

我需要等待来自我的服务器的答复才能确定电子邮件是否已被占用。但我正在努力做到这一点。在我的 if 语句中,打字稿说 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){...}
   ..
 }

【问题讨论】:

标签: javascript angular typescript promise angular2-template


【解决方案1】:

您不能将异步调用转换为同步调用。

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

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

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

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

你实际上并不需要你的 isCorrectEmail() 函数,因为它对结果没有任何作用,但如果它做了更复杂的事情,所以它实际上是需要的,那么它必须返回 Promise

isCorrectEmail(): Promise<boolean> {
    return this.isEmailAvailable().then(result => result);
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2017-02-17
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2018-07-04
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多