2017-09-30 2 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

나는 remove 기능에 forEach와 실수, 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 }); 
};