现在我有这个路线控制器
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;
}
该函数返回一个promise。是否可以在控制器内编写此代码?我尝试对我的控制器使用“async”,但我不工作
像这样的东西(不起作用)
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 });
};
答案 0 :(得分:2)
不清楚"什么"完全没有用。对不良行为的例外或描述会很有用。
但请查看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
答案 1 :(得分:2)
我认为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 });
};