2017-06-08 7 views
0

電子メールが既に送信されているかどうかを私のサーバーからの回答を待つ必要があります。しかし、私はこれを同期させるのに苦労しています。私のifステートメントでは、typescriptはisCorrectEmail()はvoid関数(私は理解できますが解決できない)だと言います。何か案が?Angular2 - 条件文の中で約束する

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

[避けてください'Promise'コンストラクタ反パターン](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi

答えて

0

非同期呼び出しを同期モードに切り替えることはできません。

あなたは2つのオプションがあります。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); 
};