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

367
Views
NodeJS: cómo llenar Array a través de la función de devolución de llamada

Espero que el siguiente fragmento de código sea suficiente para explicar mi problema:

 function getChildrensRoomsProductNumbers(uuids, callback) { var productNumbers = []; uuids.forEach(uuid => getProductNumber(uuid, function(productNumber){ productNumbers.push(productNumber);})) callback(productNumbers); }

Entonces, para una matriz de uuids, me gustaría solicitar los números de producto correspondientes de una tienda en línea y almacenarlos en la matriz productNumbers que luego me gustaría pasar a una función principal para una mayor manipulación llamando a callback(productNumbers)

La solicitud en sí se realiza en la función getProductNumber .

Sin embargo, no entiendo por qué la matriz productNumbers está vacía. Sé que forEach no devuelve nada, por eso preparé una matriz de antemano que debería completarse con mi idea.

Soy relativamente nuevo en NodeJS/JavaScript, por lo que probablemente me falten algunos conceptos básicos aquí.

Esta es la función getProductNumber :

 function getProductNumber(uuid, callback){ getToken(function(err, token){ var headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json', }; const options = { url: BASE_URL + 'api/product/' + uuid, method: 'GET', headers: headers }; axios.request(options) .then(res => { console.log("NUmber: " + res.data.data.productNumber); callback(res.data.data.productNumber); }) .catch(err => { console.error(err.response); }); }) }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

primero aprenda el estilo async/await para deshacerse de las devoluciones de llamada

entonces esto será factible:

 async function getChildrensRoomsProductNumbers(uuids) { var productNumbers = []; for (let uuid of uuids) { const productNumber = await getProductNumber(uuid); productNumbers.push(productNumber); } return productNumbers; }

como dijo la gente en los comentarios, parece que getProductNumber hace un trabajo asíncrono. Si desea seguir con las devoluciones de llamada, puede usar https://www.npmjs.com/package/async para activar una devolución de llamada cuando finalice el bucle.

about 4 years ago · Juan Pablo Isaza Report

0

Gracias a @Raphael PICCOLO por señalar la función util.promisify .

Sobre esa base, prometí la función que tengo para obtener el token de la API de la tienda y hacer que el resto funcione con async/await, así:

 const awaitablegetToken = util.promisify(getToken); async function getChildrensRoomsProductNumbers(uuids) { var productNumbers = []; var accessToken = await awaitablegetToken(); for (const uuid of uuids){ const productNumber = await getChildrensRoomsProductNumber(uuid, accessToken) productNumbers.push(productNumber); } return productNumbers; }
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!