2017-12-20 35 views
0

私はasync/awaitモジュールを実装しようとしています。 function2では、userが存在しない場合、そこでの実行を停止したいと思います。私は、ユーザーが発見された場合に解決する機能2に新しい約束を返す関数3ノードjsでasync awaitを使用していますか?

const function1() { 
       //code 
       return a 
       } 

    const function2= (a,email) => model.user.findOne({ email:email}).then((user) => { 
        if (!user) { 
         ****// want to stop execution here**** 
        } else { 
         //update details of user 
        } 

        return dealer; 
       }); 


const function 3 = function(dealer) { 
      //mail sending 
    }; 

exports.mailer = async(email,callback) => { 
       try { 
        var a =await function1(); 
        var dealer =await function2(a,email); //stop execution here  
        var res = await function 3(dealer); 
         await callback(res); 
        }catch (err){ 
         callback(err); 
        } 
       } 
+0

停止実行とは何を意味しますか? if(!user)文のfunction2にエラーを投げて、エクスポート関数内のcatch文がそれを処理します。 –

+0

メッセージユーザーが既に登録されている必要がありますが、実際にはエラーではありません。 –

答えて

2

実行するユーザー存在する場合、機能3を実行したい、とあなたは私は信じたいものを達成すべきでない場合は拒否していけません。 次のようなもの:

const function1 =() => { 
    return a 
} 

const function2 = (a, email) => { 
    return new Promise((resolve, reject) => { 
     model.user.findOne({ 
      email: email 
     }).then((user) => { 
      if (!user) { 
       // want to stop execution here**** 
       reject(new Error('Error Message')) 
      } else { 
       // update details of user 
       resolve(dealer) 
      } 
     }) 
    }) 
} 

const function3 = (dealer) => { 
    //mail sending 
} 

exports.mailer = async (email, callback) => { 
    try { 
     var a = await function1() 
     var dealer = await function2(a, email) // stop execution here 
     var res = await function3(dealer) 
     await callback(res) 
    } catch (err) { 
     callback(err) 
    } 
} 
+0

それは私の問題を解決しましたが、疑問があります。非同期/待機は約束を置き換えるために使用されています。 –

+1

非同期待機は、約束でのみ機能します。あなたは約束を待つだけです。 .thenと.catchの代わりにAsync awaitを使うこともできますが、私はそれを代わりに使うこともできます。私の現在の主要なプロジェクトでは、状況に応じて、私は待っていると組み合わせて使用​​します。 –

関連する問題