2017-09-06 2 views
1

Wenn ich pdfCreate aufrufen, wird ein Vorfall geladen, der gut funktioniert.Nodejs Ereignis in Promis nicht auflösen

Dann createIncidentReport heißt von einem inbegriffenen Dienst, dies funktioniert gut.

pdfStream.on('finish') wird aufgerufen, sobald die PDF auf die Festplatte geschrieben wird, funktioniert das auf der Konsole. Das Protokoll wird geschrieben, aber der Mailservice wird nicht aufgerufen. Wie soll ich das Versprechen lösen?

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

Sie die finsh Veranstaltung von pdf-Stream erhalten Sie? Das console.log 'zeigt fertige PDF-Datei an? –

+0

Ja, es zeigt die Konsolenprotokollierung ... – Nealv

Antwort

2

Ok, ich habe die Antwort gefunden.

erwartet einen Vorfall, und meine Entschlossenheit hat es nicht bestanden, so dass die Funktion wegen des fehlenden Parameters nicht aufgelöst wurde.

es wurde behoben, indem Sie diese:

resolve(incident); 

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