2017-09-30 2 views
0

i ont En ce moment ce contrôleur d'itinéraireNodeJS - Async/Attendent à mon contrôleur

export let remove = (req: Request, res: Response) => { 
    Area.removeAndRecalc(req.query.ids).then(() => { 
     return res.json({ success: true }); 
    }); 
}; 

et appelle la méthode modèle suivant

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

La fonction retourne une promesse. Est-il possible d'écrire ce code dans le contrôleur? J'essaie d'utiliser « async » à mon contrôleur, mais je ne fonctionne pas

Quelque chose comme ça (ne fonctionne pas)

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

Répondre

2

On ne sait pas « ce que » ne fonctionne pas exactement. Une exception ou une description du comportement incorrect serait utile.

Mais vérifiez async-middleware. Je l'utilise comme celui-ci, par exemple dans certains projets:

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

Je pense qu'il ya une erreur avec forEach dans la fonction remove, forEach retours undefined pas une promesse si await ne fonctionnera pas comme prévu, essayer à quelque chose comme ceci:

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