如何在 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" 值。有人可以帮我解决这个问题吗?
将回调函数设为异步,然后使用 await。
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);
})
})
}
我有以下代码:
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" 值。有人可以帮我解决这个问题吗?
将回调函数设为异步,然后使用 await。
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);
})
})
}