Как вернуть ответы в nodejs? - PullRequest
       7

Как вернуть ответы в nodejs?

1 голос
/ 08 января 2020

У меня есть код ниже:

exports.generateCo = async function(req,res,next){
     //some code
     return new Promise(function (resolve,reject){
      if(err){
        //some code
      }
      else{

        //some code
        let mail = await sendEmail.otp(val,mailid,sub);
        console.log("mail -- ",mail);
        }
    })
}


In Another file:

exports.otp = async function(val,mailid,sub){
    //some code 
    transporter.sendMail(options,(error,info) =>
      if(error){
        //error logs
        respobj = {status: "err"};
      }
      else{
         //success logs
         respobj = {status: "success"};
      }
      return respobj;
}

Здесь, в первом файле, я не могу получить ответ в переменной "mail". Я получаю "неопределенное" значение. Кто-нибудь может помочь мне с этим?

Ответы [ 3 ]

1 голос
/ 08 января 2020

await не будет работать внутри обещания.

Согласно данному коду, вам не нужно определять новое обещание внутри функции asyn c.

Если вам нужно новое обещание, вы не можете ждать его внутри обратного вызова обещания. Вместо этого следует использовать формат затем.

sendEmail.otp(val,mailid,sub).then((mail) => {
  console.log("mail -- ",mail);
})

Кроме того, функция otp имеет callbck, поэтому она должна быть заключена в обещание.

exports.otp = async function(val,mailid,sub) {
  //some code 

  return new Promise((resolve, reject) = {
    transporter.sendMail(options,(error,info) => {
      if(error){
        //error logs
        respobj = {status: "err"};
      } else {
       //success logs
       respobj = {status: "success"};
      }

      return resolve(respobj);
    })
  })
}
0 голосов
/ 08 января 2020

Окончательный возврат в правильном месте? Обычно я обнаружил, что допустил ошибку.

0 голосов
/ 08 января 2020
  1. Сделайте функцию обратного вызова асинхронной c, затем используйте await.

  2. Возвратите respobj из with при обратном вызове, если вы попытаетесь вернуть ответ из за пределами обратного вызова, прежде чем ждать какого-либо transporter.sendMail, он вернет undefined.

    exports.generateCo = async function(req,res,next){
    //some code
    return new Promise(async function (resolve,reject){
    if(err){
    //some code
    }
    else{
    
    //some code
    let mail = await sendEmail.otp(val,mailid,sub);
    console.log("mail -- ",mail);
    }})
    }  
    
    exports.otp = async function(val,mailid,sub){
    //some code 
    transporter.sendMail(options,(error,info) => {
    if(error){
    //error logs
    respobj = {status: "err"};
    }
    else{
     //success logs
     respobj = {status: "success"};
    };
    return respobj});
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...