完成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中返回推送的数组响应?的主要内容,如果未能解决你的问题,请参考以下文章

在执行具有axios调用的for / forEach循环完成后如何调用语句?

Node JS forEach内存泄漏问题

在 forEach 循环完成后运行回调函数

Js中数组的forEach()方法return无法退出循环

node.js 中的异步函数完成后如何运行函数?

如何使用 foreach 循环在列表中的短语之间添加分隔符?