完成foreach循环后如何在节点js中返回推送的数组响应?
Posted
技术标签:
【中文标题】完成foreach循环后如何在节点js中返回推送的数组响应?【英文标题】:How to return pushed array response in node js after completing the foreach loop? 【发布时间】:2021-04-26 21:20:16 【问题描述】:我正在运行一个 foreach 循环并尝试将数据发送到客户端。但是当它从循环中出来时,它给出了空数组,因为我已经全局声明了变量。我想单独推送loanid并将其作为响应返回这是我的代码sn-p
if (notificationType == "sms" || notificationType == "both")
let invalidLoanID = [];
let text = ""
notificationPayload.forEach((element) =>
let checkQuery =
"select * from loan where loanid = " + "'" + element.loanid + "'";
sql
.query(checkQuery)
.then((loanResponse) =>
// console.log("------",loanResponse)
if (loanResponse.length == 0)
text = element.loanid
invalidLoanID.push(text);
console.log("===", invalidLoanID);
if (loanResponse.length > 0)
let insertQuery =
"INSERT INTO notification " +
"(loanid, userid, language, notificationmsg, createddt, expirydt, " +
"notificationtype, isFailed, failureremarks,isSMSSent) VALUES " +
"(" +
"'" +
element.loanid +
"'," +
"'" +
element.userid +
"'," +
"'" +
element.langauge +
"'," +
"'" +
"Loan no:"+ element.loanid +"; " + element.notificationMsg +
"'," +
"'" +
element.createdate +
"'," +
"'" +
element.expiryDate +
"'," +
"'" +
element.notificationType +
"'," +
+element.isFailed +
", '" +
element.failureremarks +
"', 0" +")";
)
.catch((err) =>
res.status(400).json(
status: 400,
message: err,
);
);
)
)
res.status(200).send( 回应:“成功”, message: "消息发送成功", invalidLoanID : invalidLoanID
【问题讨论】:
【参考方案1】:尝试使用异步/等待。
基本上,当您使用 .then() 处理 Promise 时,您的代码不会等待您的 Promise 被解析。然后,您的代码在“res.status(200).send...”之前传递,并且在您的 Promise 在您的 .then() 中解决之后
使用 async/await 你可以“强制”你的代码等待这个 Promise 被解决。
【讨论】:
【参考方案2】:你可以试试
sql
.query(checkQuery)
.then((loanResponse) =>
...... **your code** ......
res.status(200).send(
response: "Success",
message: "Message sent sucessfully",
invalidLoanID : invalidLoanID
) ).catch(())
你的响应码先解析,不会是等待查询。然后()
【讨论】:
我必须在 foreach 循环后返回响应。此代码给出错误以上是关于完成foreach循环后如何在节点js中返回推送的数组响应?的主要内容,如果未能解决你的问题,请参考以下文章