0

I am new to Nodejs. Process is not waiting until response back from function. Because of asynchronous calling of Nodejs. how to make synchronous. Please help me.

Here is my code

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
              })
            }
          } 
       });
     }
  })      
}

here is my function

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;
     }
  })
}
siva
  • 69
  • 14

1 Answers1

0

Add a callback to it:

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);
  })
}

The Code:

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
                })
              }
            });

          } 
      });
    }
  })      
}
Cleriston
  • 750
  • 5
  • 11