【发布时间】:2021-09-07 01:41:10
【问题描述】:
我正在尝试获取一些数据并将其添加到现有数据集(对象),但数据显示为空。但是,我可以使用 typeorm 查询从数据库中获取数据。
我意识到我的错误是该方法在我的循环完全迭代之前返回数据。发现for...of 循环更适合async/await。但仍然没有运气。
这是我想要做的:
export const getTopicDetails = async (
req: Request,
res: Response
): Promise<Response> => {
try {
let topicDetail: any = await Chapter.createQueryBuilder("topic")
.leftJoinAndSelect("topic.grs", "grs")
.leftJoinAndSelect("grs.srs", "srs")
.leftJoinAndSelect("grs.points", "grs_points")
.leftJoinAndSelect("srs.points", "srs_points")
.leftJoinAndSelect("grs_points.srs", "grs_points_srs")
.leftJoinAndSelect("grs_points.points", "grs_points_points")
.leftJoinAndSelect("srs_points.points", "srs_points_points")
.where("topic.id = :id", { id: req.params.id })
.andWhere("grs.sequence IS NULL")
.andWhere("srs.parent_sr_id IS NULL")
.orderBy("grs.id", "ASC")
.addOrderBy("grs_points.sequence", "ASC")
.getOne();
for (const gr of topicDetail.grs) {
for (const point of gr.points) {
for (const firstLevelPoint of point.points) {
var srs = await Srmodule.createQueryBuilder("srs")
.where("srs.grId = :grId", { grId: firstLevelPoint.id })
.getMany();
// this is returning an empty object
nestedProperty.set(topicDetail, `2`, srs);
// this thing returns as expected
nestedProperty.set(topicDetail, `3`, [
{
"id": 5,
"srNo": "1.01.02.01",
"grId": 7,
"title": "test",
"description": "lorem ipsum dolor sit amet",
"created_at": "2021-06-21",
"addedBy": 1,
}
]);
}
}
}
if (topicDetail) {
return res.status(200).json({
status: true,
data: topicDetail,
});
} else {
return res.status(404).json({ status: false, error: "No data found" });
}
} catch (error) {
return res.status(500).json({ status: false, error: error });
}
};
这是我得到的回应:
"status": true,
"data": {
"1": 1,
"2": {},
"3": [
{
"id": 5,
"srNo": "1.01.02.01",
"grId": 7,
"title": "test",
"description": "lorem ipsum dolor sit amet",
"created_at": "2021-06-21",
"addedBy": 1,
}
]
}
感谢任何帮助。
【问题讨论】:
-
我想出了一个解决方法。我对这种嵌套的树实体有太多问题。所以我决定把我所有的整体放在一个数据库表中并添加父子关系。这样我就可以通过查询来提取它们,但不知道为什么查询返回不完整的数据。所以我再次使用一个函数来构建一个嵌套对象,其中包含我从查询中获得的原始数组。这是一个示例:gist.github.com/subhamchbty/6dd2367d06906bde988b2834692cded6
标签: javascript node.js async-await typeorm for-of-loop