2017-09-06 1 views
1

Lorsque j'appelle pdfCreate, un incident est chargé, ce qui fonctionne correctement.L'événement Nodejs dans promis ne résout pas

Puis createIncidentReport est appelé à partir d'un service inclus, cela fonctionne très bien.

pdfStream.on('finish') est appelée une fois que le fichier PDF est écrit sur le disque, cela fonctionne très bien sur la console. Le journal est écrit, mais le service de messagerie n'est pas appelé. Comment devrais-je résoudre la promesse?

function pdfCreate(incidentId) { 
     Incident.findById(incidentId) 
      .then(incident => pdfService.createIncidentReport(incident)) 
      .then(() => mailservice.sendPdfCreatedMail(incident)); 
    } 

    function createIncidentReport(incident, res) { 
      return new Promise((resolve, reject) => { 
        let pdfStream = fs.createWriteStream(settings.PDF.DIRECTORY + incident.id + '.pdf'); 
        incidentReport.pipe(pdfStream); 
        pdfStream.on('finish', function() { 
         console.log('finished writing pdf') 
         resolve(); 
        }); 
      } 
     } 

    function sendPdfCreatedMail(incident) { 
     console.log('mail'); 
     let message = { 
      to: incident.reporter.email, 
      subject: 'Incident completed', 
      text: 'Incident has been completed.', 
      html: 'Incident has been completed.' 
     }; 

     sendMessage(message); 

    } 
+0

Avez-vous l'événement finsh de pdf Stream? Le console.log 'montre-t-il fini d'écrire pdf? –

+0

oui il montre la finition de la console ... – Nealv

Répondre

2

Ok, j'ai trouvé la réponse.

.then(() => mailservice.sendPdfCreatedMail(incident)); 

attend un incident, et ma détermination na pas passer si la fonction n'a pas résolu en raison du paramètre manquant.

le fixe en faisant ceci:

resolve(incident); 

.then(incident => mailservice.sendPdfCreatedMail(incident));