如何在 nodejs 中 return 响应?

How to return responses in nodejs?

我有以下代码:

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" 变量中获得响应。我得到 "undefined" 值。有人可以帮我解决这个问题吗?

  1. 将回调函数设为异步,然后使用 await。

  2. Return respobj with in 回调,如果你尝试 return 来自回调外部的响应,那么在等待任何 transporter.sendMail 之前它会return未定义。

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

最后的return在正确的位置吗?这通常是我发现我犯了一个错误。

The await wont work inside a promise.

根据给定的代码,您不需要在异步函数中定义新的 promise。

如果你需要新的承诺,你不能在承诺回调中等待。您应该改为 then 格式。

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

Also, the otp function has a callbck, so it has to be wrapped in a promise.

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