promis中的Nodejs事件不能解决

当我打电话pdfCreate ,一个事件被加载,工作正常。

然后createIncidentReport被包含的服务调用,这工作正常。

一旦将PDF写入磁盘,将调用pdfStream.on('finish') ,这可以在控制台上正常工作。 日志被写入,但是然后邮件服务不被调用。 我应该如何解决这个承诺?

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

好的,我find了答案。

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

期待一个事件,我的决心并没有通过它,所以function没有解决,因为缺less的参数。

通过这样做来修复它:

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