node.js - Promise 中的 Nodejs 事件无法解析

标签 node.js events promise

当我调用pdfCreate时,会加载一个事件,效果很好。

然后从包含的服务中调用createIncidentReport,这可以正常工作。

一旦 PDF 写入磁盘,就会调用

pdfStream.on('finish') ,这在控制台上运行良好。日志已写入,但邮件服务未被调用。我该如何兑现 promise ?

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

    }

最佳答案

好的,我找到了答案。

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

正在等待一个事件,但我的解析没有通过它,因此该函数由于缺少参数而无法解析。

通过这样做修复它:

resolve(incident);

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

关于node.js - Promise 中的 Nodejs 事件无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46068635/

相关文章:

angularjs - Typescript 类型 'number' 不可分配给类型 'string'

javascript - 在找出为元素定义了哪些 JavaScript 事件之后,我们如何进行?

windows - Windows Server 2003 上的 Log4Net

javascript - 我如何使用 jQuery 来确定点击事件是否在特定元素内触发?

javascript - Promise 在代码块完成之前就已解决

node.js - Nodejs + 要求 instanceof 行为

javascript - 是否可以在 javascript 中为 native 类型设置 getter

javascript - 不允许 Angular 形式的空白

javascript - 多次调用 promise 函数,直到满足另一个 promise 函数的条件

javascript - 在node.js中迭代大量异步调用/结果(使用ES6/async/bluebird/generators)?