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

142
Views
cómo asegurarse de que la devolución de llamada de una llamada de función se ejecute solo después de la devolución de llamada de la segunda llamada de función

Estoy tratando de analizar un pdf que contiene datos en forma de tabla usando javascript. Mi archivo pdf es un horario universitario en forma de cuadrícula que tiene datos en cada cuadrícula. Estoy haciendo uso del paquete pdfreader npm (soy bastante nuevo en javascript, así que no estoy seguro de si existe un paquete mejor para el caso de uso)

Mi plan es primero analizar a través del pdf y con la ayuda de algunas palabras que sé que están presentes en la tabla de tiempo (por ejemplo, el nombre de los días) y obtener las coordenadas x e y aproximadas de la cuadrícula en el pdf. En segundo lugar, analice el pdf una vez más y ahora, a partir del texto, obtengo una matriz 2d con la ayuda de las coordenadas que obtuve en el primer paso.

En el ejemplo del analizador de pdf hay una función, parseFileItems, que llama a itemHandler(error, item) en cada elemento analizado del archivo pdf. Entonces, para el primer paso, llamo a la función como

 new PdfReader().parseFileItems("./timetable.pdf", (err, item) => { if (err) console.error("error:", err); else if (!item) console.warn("end of file"); else if (item.text) { cordinatesofGrid=//my logic to fetch the cordinates of the grid } });

Ahora lo que tengo que hacer es analizar el pdf una vez más y hacer uso de la variable "cordinatesofGrid" que obtuve en la primera pasada. así que nuevamente tengo la intención de llamar a parseFileItems por segunda vez. Pero esto debería suceder solo una vez que el primer paso y su código de devolución de llamada hayan terminado de ejecutarse.

Intenté llamar a los primeros parseFileItems con await y luego llamar a la función de análisis por segunda vez, pero esto no funciona como se esperaba. (Supongo que esto se debe a que la espera no se aplica a la devolución de llamada)

 await new PdfReader().parseFileItems("./timetable.pdf", (err, item) => { //first call }); new PdfReader().parseFileItems("./timetable.pdf", (err, item) => { //second call });

¿Alguien podría sugerir cómo asegurarse de que la devolución de llamada de una llamada de función se ejecute solo después de la devolución de llamada de la segunda llamada de función?

about 4 years ago · Santiago Gelvez
3 answers
Answer question

0

Podría crear un contenedor Promise alrededor del nuevo PdfReader()

Para tu información, ¡no sé si la biblioteca de pdf está basada en promesas! esto es de la información que proporcionó!

 //This code will always resolve and never throw a reject const PdfReaderAsync = () => { return new Promise((res, rej) => { new PdfReader().parseFileItems("./timetable.pdf", (err, item) => { if (err || !item) rej(err) res(item) }) }) } //Make the function you are calling this code async //So you can use it like this try { let item = await PdfReaderAsync() // Run through your code } catch (err) { //handleError } // Code 2 try { let item = await PdfReaderAsync() // Run through your code } catch (err) { //handleError }
about 4 years ago · Santiago Gelvez Report

0

Podría intentar usar la función .then() para el manejo de promesas.

Aquí hay un ENLACE a alguna documentación sobre cómo funciona/cómo usarlo. Creo que esto solo funcionaría si sus funciones usan promesas (que asumí ya que intentó esperar).

about 4 years ago · Santiago Gelvez Report

0

Puede poner el segundo en la primera devolución de llamada y usar await

 await new PdfReader().parseFileItems("./timetable.pdf", async(err, item) => { await new PdfReader().parseFileItems("./timetable.pdf", (err, item) => { //second call }); //first call });
about 4 years ago · Santiago Gelvez 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!