在继续之前,我如何等待完成2个异步过程完成?

时间:2018-06-13 00:00:13

标签: node.js asynchronous imap

我正在使用Node.js服务器,该服务器使用node-imap与Imap服务器通信。 IMAPMessage由Body和Attributes组成。我使用以下代码来获取它们,以及MailParser来解析电子邮件:

            imap.once('ready', function () {
            imap.openBox(req.params.box, function (err, box) {
                if (err) throw err
                var f = imap.seq.fetch('1:*', {
                    bodies: [''],
                    struct: true
                });
                f.on('message', function (msg, seqno) {
                    var thisEmail;
                    var thisAttr;
                    msg.on('body', function (stream, info) {
                        var mp = new MailParser();
                        mp.on('end', function (obj) {
                            thisEmail = obj;
                        });
                        stream.pipe(mp);
                    });
                    msg.once('attributes', function (attrs) {
                        thisAttr = attrs;
                    });
                    msg.once('end', function () {
                        var email = new EmailModel({
                            attr: thisAttr,
                            email: thisEmail
                        })
                        emailArray.push(email);
                    });
                });
                f.once('error', function (err) {
                    console.log('Fetch error: ' + err);
                });
                f.once('end', function () {
                    console.log('Done fetching all messages!');
                    imap.end();
                    res.status(201).json({
                        message: 'success',
                        obj: emailArray
                    })
                });

            })
        });

        imap.once('error', function (err) {
            console.log(err);
        });

        imap.once('end', function () {
            console.log('Connection ended');
        });

        imap.connect();
    })

在将电子邮件(由属性和正文组成)推送到我的电子邮件阵列之前,我需要确定已调用mp.on(&#39; end&#39;)并且已解析的数据是准备。在构建我的电子邮件对象并将其推送到我的电子邮件阵列之前,我如何等待mp.on(&#39; end&#39;)和msg.once(&#39; end&#39;)完成?< / p>

0 个答案:

没有答案