Nodejs - Async / Await到我的控制器

时间:2017-09-30 13:15:25

标签: node.js express mongoose async-await

现在我有这个路线控制器

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 });
};

2 个答案:

答案 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 });
};