我正在使用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>