javascript - 使用 for 或 forEach 查询 json 中的每个对象
问题描述
我的问题是,我想使用一些循环对 JSON 中的每个对象进行 INSERT 查询,但我几乎总是得到一个错误“在将标头发送到客户端后无法设置标头”。有人可以帮忙吗?Tnx
const connection = require('./config');
module.exports.excel = function (req, res) {
var _query = 'INSERT INTO excel (id, first_name, last_name) values ?';
var jsonData = req.body;
var values = [];
function database() {
return new Promise((resolve, reject) => {
jsonData.forEach((value) => {
values.push([value.id, value.first_name, value.last_name]);
connection.query(_query, [values], (error, results) => {
if (error) {
reject(
res.json({
status: false,
message: error.message
}))
} else {
resolve(
res.json({
status: true,
data: results,
message: 'Excel file successfully created in database'
}))
}
});
});
})
}
async function write() {
await database();
}
write();
}
从 Angular 6 前端获取 JSON 后,我将 req.body 放入 jsonData 并尝试使用 forEach 将每个对象(在本例中为“值”)放入查询中并将其写入 Excel 文件。
解决方案
您必须将每个包装query
在 a 中Promise
并等待所有完成,然后再发送response
usingPromise.all
database()
当其中一个查询失败并且您将throw
无法访问已解决的承诺时,情况并非如此。
const connection = require('./config');
module.exports.excel = function(req, res) {
const _query = 'INSERT INTO excel (id, first_name, last_name) values ?';
const jsonData = req.body;
function database() {
return Promise.all(
jsonData.map(
value =>
new Promise((resolve, reject) => {
const values = [value.id, value.first_name, value.last_name]
connection.query(_query, [values], (error, results) => {
if (error) {
reject(error.message);
return;
}
resolve(results);
});
})
)
);
}
async function write() {
try {
const results = await database();
res.json({
status: true,
data: results,
message: 'Excel file successfully created in database'
});
} catch (e) {
res.json({
status: false,
message: e.message
});
}
}
write();
};
推荐阅读
- django - 为什么当 django 频道开发服务器启动时我的 websocket 不能立即连接?
- javascript - 制表符选择行范围与移位不起作用
- azure - 无法将 MySQL 与 Azure 数据工厂链接
- python - 在 Python 中从 JSON 构建表
- mysql - 在最近的日期时间左连接表而不重复值
- r - 如何在 ggplot2 (R) 中定义误差线的宽度?
- r - 在 ggplot 中制作圆形线端 - 在情节和图例中
- vba - 在 UFT 中更改动态数组大小时出错
- python - 使用 cross_val_scores 时性能更差,为什么?
- mongodb - 使用 mgodb-go-driver 将上传的文件存储在 MongoDB GridFS 中,无需保存到内存