在Node.js中使用Express.js框架时,如果需要等待forEach循环中的SQL查询完成,可以使用Promise和async/await来实现。
首先,需要将SQL查询封装成一个返回Promise的函数,确保查询完成后能够通过resolve返回结果。接下来,在使用forEach循环的地方,使用async关键字声明一个异步函数,并使用await关键字来等待每个SQL查询的结果。
以下是一个示例代码:
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数据库的示例模块,您可以根据自己的数据库类型选择相应的模块。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云