的NodeJS - 异步/等待我的控制器
问题描述:
现在我有这个路由控制器的NodeJS - 异步/等待我的控制器
export let remove = (req: Request, res: Response) => {
Area.removeAndRecalc(req.query.ids).then(() => {
return res.json({ success: true });
});
};
,并调用下面的模型方法
areaSchema.statics.removeAndRecalc = async function(ids) {
let parents = await this.model("Area").find({_id: ids});
await this.model("Area").delete(
{
_id: ids
}
);
await parents.forEach((parent) => {
parent.recalcParentChilds();
})
return;
}
该函数返回一个承诺。是否可以在控制器内写入这些代码?我尝试使用“异步”我的控制器,但我不工作
这样的事情(不工作)
export let remove = async (req: Request, res: Response) => {
let parents = await this.model("Area").find({_id: req.query.ids});
await this.model("Area").delete(
{
_id: req.query.ids
}
);
await parents.forEach((parent) => {
parent.recalcParentChilds();
})
return res.json({ success: true });
};
答
目前还不清楚“什么”,究竟是行不通的。坏行为的例外或描述将会很有用。
但是退房async-middleware。我使用的是这样的,例如在一些项目:
import { wrap } from 'async-middleware'
//Loads of code, some of which creates router, an Express router.
router.get('/some/path/here', wrap(async (req, res) {
var data = await dataFromService();
res.write(renderData(data));
res.end();
}));
//Loads of code
答
我觉得这是有forEach
一个错误在remove
功能,forEach
返回undefined
没有承诺那么await
将不会达到预期效果,尝试像这样:
export let remove = async (req: Request, res: Response) => {
//...
for (let i=0; i< parent.length;i++){ // <-- use for loop instead of forEach
await parent.recalcParentChilds();
}
return res.json({ success: true });
};