Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

366
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda