首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NodeJS + ExpressJS:如何等待forEach完成其中的SQL查询

在Node.js中使用Express.js框架时,如果需要等待forEach循环中的SQL查询完成,可以使用Promise和async/await来实现。

首先,需要将SQL查询封装成一个返回Promise的函数,确保查询完成后能够通过resolve返回结果。接下来,在使用forEach循环的地方,使用async关键字声明一个异步函数,并使用await关键字来等待每个SQL查询的结果。

以下是一个示例代码:

代码语言:txt
复制
const express = require('express');
const mysql = require('mysql');

const app = express();
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database_name'
});

app.get('/data', async (req, res) => {
  try {
    const result = await getDataFromDatabase();
    res.json(result);
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: 'Internal Server Error' });
  }
});

function getDataFromDatabase() {
  return new Promise((resolve, reject) => {
    const data = [];
    const query = 'SELECT * FROM table_name';
  
    connection.query(query, (error, rows) => {
      if (error) {
        reject(error);
      } else {
        rows.forEach(async (row) => {
          const detail = await getDetailFromDatabase(row.id);
          data.push(detail);
  
          if (data.length === rows.length) {
            resolve(data);
          }
        });
      }
    });
  });
}

function getDetailFromDatabase(id) {
  return new Promise((resolve, reject) => {
    const query = 'SELECT * FROM detail_table WHERE id = ?';
    connection.query(query, [id], (error, rows) => {
      if (error) {
        reject(error);
      } else {
        resolve(rows);
      }
    });
  });
}

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在上述代码中,我们使用了两个自定义的函数getDataFromDatabase和getDetailFromDatabase来执行SQL查询。在getDataFromDatabase函数中,我们使用forEach循环遍历查询结果的每一行数据,并使用await关键字等待getDetailFromDatabase函数返回的结果。

请注意,在forEach循环中使用了async关键字来声明匿名函数,以便我们可以在其中使用await关键字。同时,在每次查询完成后,我们将返回的结果添加到data数组中,并通过判断data数组的长度是否等于查询结果的长度来判断所有查询是否都已完成。

这是一个简单的示例,展示了如何在Node.js中使用Express.js等待forEach循环中的SQL查询完成。实际应用中,您可能需要根据具体情况进行适当的调整和扩展。

注意:以上示例中的mysql模块是用于连接MySQL数据库的示例模块,您可以根据自己的数据库类型选择相应的模块。

相关搜索:NodeJs:如何加载网站而不等待长时间的查询完成?如何在返回填充的数组之前等待NodeJS中的foreach?NodeJS:如何在继续执行代码之前等待异步请求的for循环完成?如何在laravel的sql查询中使用foreach循环如何使用带有ExpressJS的NodeJS使用oracledb从查询中形成和获取嵌套的JSON对象这个SQL查询和连接在dplyr中是如何完成的?如何避免使用这个嵌套的while循环并在其中执行SQL查询?如何使用nodejs (ejs)将sql查询数据传递到chartjs的datasets字段如何在一个请求中等待,直到另一个请求完成nodeJS中相同函数的执行如何提高简单的T-SQL查询性能-需要很长时间才能完成。求求你...!如何使从ListFile处理器接收的流文件等待,直到其中一个特定的流文件(如果存在)的处理完成?如何从最近x个月的Postgres Sql查询中获取数据,其中日期字段是时间戳?如何向SQL Server发送命令完成从VB.Net程序发送的select查询开始的批处理?如何编写一个SQL查询,以便检查其中一个字段中的不同行是否具有相同的值?我的数据库中有一个表,其中一列包含XML。如何获取XML标记的值?请推荐SQL查询SQL SERVER 2017 -仅当组中的所有数据都标记为已完成时,我如何查询才能检索该组数据?如何从一行中选择两个列值中的一个,其中一个是您查询的值,另一个是您希望在SQL中使用的值?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • mybatis看这一篇就够了,简单全面一发入魂

    上面其实是比较原始的开发方式,我们需要编写dao类,针对mapper.xml中的每个SQL标签,做一次封装,SQL标签的id要以字符串的形式传递给SqlSession的相关方法,容易出错,非常不方便;为了简化开发,mybatis提供了mapper接口代理的开发方式,不需要再编写dao类,只需要编写一个mapper接口,一个mapper的接口和一个mapper.xml相对应,只需要调用SqlSession对象上的getMapper(),传入mapper接口的class信息,即可获得一个mapper代理对象,直接调用mapper接口中的方法,即相当于调用mapper.xml中的各个SQL标签,此时就不需要指定SQL标签的id字符串了,mapper接口中的一个方法,就对应了mapper.xml中的一个SQL标签

    03

    Node.js学习入门

    Node.js是一个可以允许我们在服务器端运行JavaScript代码的程序。 这是什么意思呢?通常,我们写的JavaScript代码都是在浏览器中运行的。 实际上,浏览器就是一个JavaScript运行时环境,用于解释执行js代码。 更进一步地说,虽然浏览器提供了JavaScript运行时环境,但是它处在客户端,也就是说此时JavaScript只能用于编写前端代码。 但是,由于Node.js的出现,JavaScript代码的执行就不会被局限于在客户端,我们同样可以让JavaScript代码在服务端执行。 OK,也就是说,即便你不懂任何服务端编程语言,但是你会写JavaScript代码,那么你就同样可以编写在服务端运行的程序。 注意:虽然我们可以使用Node.js运行js代码,但是Node.js本身却是C语言开发的!

    04
    领券