我试图将条目递归添加到数据库中,每个条目都依赖于前一个条目(前一个条目的ID将是下一个条目child_id)。这一切都很好,但我无法让async / await正常工作。
路由,(qb是下一个代码块中的类实例)
// add orgs to db
router.post('/api/v1/orgs/add', async (req: Request, res: Response) => {
const { org_name, daughters } = req.body;
if (!org_name) return res.status(400).json({ err: 'MISSING_NAME' });
const result = await qb.processRequest(org_name, daughters);
res.json(result);
});
async processRequest(name: string, daughters?: any) {
if (daughters) {
daughters.map(async daughter => {
return await this.processRequest(daughter.org_name, daughter.daughters);
});
}
await this.insertOrg(name, daughters)
}
protected insertOrg(name: string, children?: number[]) {
const childParam = children ? `array[${children}]` : 'NULL';
const query = ` INSERT INTO orgs
(org_name, daughters)
VALUES
('${name}', ${childParam})
RETURNING id`;
pool.query(query, (err, res) => {
if (err) throw err;
return res.rows[0].id;
});
}
示例POST正文
{
"org_name": "Paradise Island",
"daughters": [
{
"org_name": "Banana tree",
"daughters": [
{
"org_name": "Yellow Banana"
}
]
}
]
}
我的目标是将没有子级的最里面的组织添加到数据库中,因为其子级为NULL。该条目的ID将返回给父函数,该父函数会将返回的ID映射到子数组,并将其自身添加到包括子ID的数据库中。
答案 0 :(得分:0)
insertOrg
不会返回Promise
的{{1}}。编写它,以便它返回可以等待的承诺。
await