2017-08-24 66 views
0

我是Nodejs的新手。進程不等待,直到從功能迴應。由於Nodejs的異步調用。如何使同步。請幫幫我。在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

嘗試承諾/異步,以避免這種回調地獄 – 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 
       }) 
       } 
      }); 

      } 
     }); 
    } 
    })  
}