2017-09-30 42 views
0

现在我有这个路由控制器的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 }); 
}; 

回答

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