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