promis中的Nodejs事件无法解决

时间:2017-09-06 06:52:52

标签: node.js events promise

当我致电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);

    }

1 个答案:

答案 0 :(得分:2)

好的,我找到了答案。

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

期待一个事件,我的决心没有通过它,因此函数没有解决,因为缺少参数。

通过这样做解决了这个问题:

resolve(incident);

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