首页
学习
活动
专区
工具
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数据库的示例模块,您可以根据自己的数据库类型选择相应的模块。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券