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

128
Visualizações
JavaScript - Async/Await - ¿Cómo devolver el resultado de funciones anidadas?

Soy nuevo en Node.js y tengo dificultades para trabajar con el modelo async/await. El problema que tengo es con las llamadas a funciones anidadas que devuelven datos en un método asíncrono/en espera, siempre obtengo 'undefined' . La estructura de mis funciones es así:

 const findCustomerOrder = async (id) => { const orders = await Order.find({custoemrId:id}) .then(async (order) => { if(order) { const products = await findProductsByOrderId(order._id) .then(async (result) => { for(const r in result){ console.log("Product ID: ", result._id); } }); } else console.log("order not found"); }); } const findProductsByOrderId = async (id) => { try{ const products = await Products.find({orderId:id}, (error, data) => { if(error) console.log(error); else return data; }); } catch(err){ return 'error!!'; } }

Entiendo que si la llamada de nivel superior es asíncrona/en espera, también se deben esperar todas las llamadas anidadas que he intentado hacer.

¿Qué estoy haciendo mal aquí?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Deshágase de todo el then , y también de la devolución de llamada en la consulta DB. Usar solo await . Hará que todo el código sea mucho más fácil de razonar y también debería resolver su problema como parte de la reestructuración.

En el ejemplo a continuación, también agregué un ciclo sobre las órdenes, porque está obteniendo todas las órdenes, como una matriz, pero luego su código se comportaba como si solo tuviera una. También arreglé el bucle de productos.

Sin embargo, la forma en que busca productos no parece ser la correcta de todos modos, vea mi comentario a continuación. No lo arreglé porque no sé cómo se ve la estructura de su base de datos, así que no sé cuál sería la forma correcta.

 async function findCustomerOrder (id) { const orders = await Order.find({ customerId: id }) for (const order of orders) { console.log(`Order ID: ${order._id}`) const products = await findProductsByOrderId(order._id) for (const product of products) { console.log(`Product ID: ${product._id}`); } } } async function findProductsByOrderId (id) { // Note: I don't think this is right. It seems to find all // products with the given ID - which will always be one - // and that ID would be the _product_ ID and not the order ID. return await Products.find({ _id: id }) }

Respuesta de comentario preventivo: la return await es intencional, y es por eso que .

about 4 years ago · Juan Pablo Isaza Relatório

0

Debe eliminar el entonces y también la devolución de llamada y puede hacer algo como a continuación

 const findCustomerOrder = async(id) => { try { const orders = await Order.find({ custoemrId: id }); if (orders) { let promiseArray = []; orders.forEach(order => { promiseArray.push(findProductsByOrderId(order._id)); }); let results = await Promise.all(promiseArray); return results; } return "order not found"; } catch (err) { throw err; } } const findProductsByOrderId = async(id) => { try { const products = await Products.find({ _id: id }); return products; } catch (err) { throw err; } }

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