2017-08-24 4 views
0

私はNodejsを初めて使用しています。プロセスは、関数からの応答が返るまで待機していません。 Nodejの非同期呼び出しのため。同期化する方法。私を助けてください。Nodejsでは、応答から戻るまでの待ち時間の処理方法

ここに私のコードここ

module.exports.signup = function(req, res){ 
console.log('signup'); 
User.findOne({'emails.email' : req.body.email}, function(err, doc) { 
if (doc === null) { 
var vr_token= genRandomString(16); 
var ex_date = Date.now(); 
    var user = new User(); 
     user.emails.push({ 
     email : req.body.email, 
     email_verification_token : vr_token, 
     verify_key_expire : ex_date }); 
     user.save(function(err2,user1) { 
      if (!err2) { 
      var result = send_email.sync(vr_token);//process not waiting 
      if(result) { 
       res.json ({ 
       status: 200, 
       message:"mail sent successfully", 
       data:user1 
       }) 
      } 
      } 
     }); 
    } 
    })  
} 

function send_email(vr_token){ 
var mailOpts = { 
from: process.env.Mail_From_Addr, 
to: 'xxxxxxxxxxxxx', 
subject: 'Verify Your New Account Email', 
html:'<p>Hello,</p>code : '+vr_token 
}; 
    mailgun.messages().send(mailOpts, function (err, response){ 
    if (!err){ 
    return true; 
    }else{ 
    return false; 
    } 
    }) 
} 
+0

どのバージョンの 'nodejs'を使っていますか? – Malice

+0

私はv6.11.2を使用しています – siva

+0

そのようなコールバックhellを避けるためにpromise/asyncを試してください – saurabh

答えて

0

がそれにコールバックを追加私の関数である:

function send_email(vr_token, callback){ 
    var mailOpts = { 
    from: process.env.Mail_From_Addr, 
    to: 'xxxxxxxxxxxxx', 
    subject: 'Verify Your New Account Email', 
    html:'<p>Hello,</p>code : '+vr_token 
    }; 
    mailgun.messages().send(mailOpts, function (err, response){ 
    callback(null, !err); 
    }) 
} 

コード:

module.exports.signup = function(req, res){ 
console.log('signup'); 
User.findOne({'emails.email' : req.body.email}, function(err, doc) { 
if (doc === null) { 
var vr_token= genRandomString(16); 
var ex_date = Date.now(); 
    var user = new User(); 
     user.emails.push({ 
     email : req.body.email, 
     email_verification_token : vr_token, 
     verify_key_expire : ex_date }); 
     user.save(function(err2,user1) { 
      if (!err2) { 
      send_email.sync(vr_token, function(err, result){ 
       if(result) { 
       res.json ({ 
        status: 200, 
        message:"mail sent successfully", 
        data:user1 
       }) 
       } 
      }); 

      } 
     }); 
    } 
    })  
} 
関連する問題