尝试在try块中处理Promise拒绝

时间:2018-11-12 17:14:54

标签: javascript node.js express promise

我很难理解下面的代码为何抛出未处理的承诺拒绝警告

router.post('/stampaClasse/:as(20[0-9][0-9]/[0-9][0-9])/:classe([1-8])',async function (req,res,next){

  const sezioni = await Classi.getSezioniFromAnnoScolasticoAndClasse(req.params.as,req.params.classe);
  let options = {
    semestre: req.body.semestre,
    fontSize: req.body.fontSize,
    textColor: '#515151',
    gridColor: '#bec0be',
    corDidattico:{
      titolo:'prof.',
      nome:'Roberto',
      cognome:'Dalema'
    }
  }
  let newPDF = new pdfKit();
  try{
    for(sezione of sezioni){

      const idStudentiPromise = Classi.getStudentiFromAnnoScolasticoAndClasseAndSezione(req.params.as,req.params.classe,sezione)
      const materiePromise = Classi.getMaterieSezione(req.params.as,req.params.classe,sezione)
      const infoStudentiPromise = Promise.all(  Studenti.getInfoStudentiById(await idStudentiResults) )


      let classe = {
        annoScolastico: req.params.as,
        classe : req.params.classe,
        sezione: sezione,
        materie: await materiePromise,
        studenti: await infoStudentiPromise
      }
      for(studente of classe.studenti){
        studente.pagelleMateriePromises = classe.materie.map(async m=>Pagelle.getPagellaFromStudente(classe.annoScolastico,classe.classe,classe.sezione,m,studente.id));
      }
      for(studente of classe.studenti){
        studente.pagelleMaterie = await Promise.all(studente.pagelleMateriePromises)
        addHeader(newPDF,studente,classe,options);
        addPagelleSemestre(newPDF,studente,classe,options);
        addFooter(newPDF,studente,classe,options);
      }
    }

    newPDF.pipe(res);
    newPDF.end();
  }
  catch(err){
    next(err)
  }
});  

错误多次发生,并且是由于在行

const infoStudentiPromise = Promise.all(  Studenti.getInfoStudentiById(await idStudentiResults) )

idStudentiResults alredy返回Promise.all()

致谢是什么原因导致的错误,我想知道为什么它说错误没有得到处理。尝试抓住不是笑吗?

1 个答案:

答案 0 :(得分:0)

Promise.all需要接收一组诺言作为参数。确保Module.getInfo(ids)返回该值。