Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

99
Views
Async simpleParser devuelve una matriz vacía

Quiero incluir todo mi correo electrónico en una lista, pero mi matriz de promesas está vacía. Creo que está relacionado con algunos problemas asincrónicos, pero no puedo entender cuál es el problema.

 var promises = []; const imap = new Imap(imapConfig); imap.once("ready", () => { imap.openBox("INBOX", false, () => { imap.search(["ALL", ["SINCE", new Date()]], (err, results) => { const f = imap.fetch(results, { bodies: "" }); f.on("message", (msg) => { msg.on("body", (stream) => { simpleParser(stream, async (err, parsed) => { const { from, subject, textAsHtml, text } = parsed; promises.push(text); }); }); }); f.once("end", () => { console.log("Done fetching all messages!", promises); imap.end(); }); }); }); }); imap.connect(); return await Promise.all(promises);
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El problema surge debido a la combinación de devoluciones de llamada con promesas. Una devolución de llamada no es síncrona. La forma en que su código funciona a partir de ahora es:

 var promises = []; const imap = new Imap(imapConfig); imap.once("ready", () => {/*async code*/}); return await Promise.all(promises);

Para la solución más simple, debe envolver la lógica dentro de un new Promise .

Usando esto, la solución sería:

 let promise = new Promise((resolve, reject) => { var promises = []; const imap = new Imap(imapConfig); imap.once("ready", () => { imap.openBox("INBOX", false, () => { imap.search(["ALL", ["SINCE", new Date()]], (err, results) => { const f = imap.fetch(results, { bodies: "" }); f.on("message", (msg) => { msg.on("body", (stream) => { simpleParser(stream, async (err, parsed) => { const { from, subject, textAsHtml, text } = parsed; promises.push(text); }); }); }); f.once("end", () => { console.log("Done fetching all messages!", promises); imap.end(); resolve(promises); }); }); }); }); imap.connect(); }); let promises = await promise; return await Promise.all(promises);

Otra posible solución: prometer devoluciones de llamadas https://zellwk.com/blog/converting-callbacks-to-promises/

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!