首页 > 解决方案 > 如何在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;
}

在第一个文件中,我无法在“邮件”变量中获得响应。我得到“未定义”的价值。有人可以帮我吗?

标签: node.jsresponse

解决方案


await不会在承诺中起作用。

根据给定的代码,您不需要在 async 函数中定义新的 Promise。

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

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

此外,otp 函数有一个 callbck,所以它必须被包装在一个 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);
    })
  })
}

推荐阅读