【发布时间】:2019-12-04 03:10:07
【问题描述】:
我正在尝试以递归方式将条目添加到数据库中,每个条目都依赖于前一个条目(前一个条目的 ID 将是下一个条目 child_id)。这一切都很好,但我无法让 async/await 正常工作。
Route,(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。
【问题讨论】:
-
insertOrg不会将Promise返回为awaited。
标签: javascript node.js postgresql typescript express