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

173
Visualizações
La función ForEach no realiza acciones en cada objeto, solo una vez

Estoy creando una aplicación de construcción de mazos para un juego de cartas, también tengo una configuración de base de datos que uso para vender estas cartas con las que juego, este creador de mazos me permite tomar del stock del stock vendible (es decir, si tengo 1 de x, y lo {deck} a un mazo, establece el countInStock de existencias de ese elemento en la base de datos en 1 menos de lo que era). que estaba en [deck.cards] que es una matriz de objetos {Card} , estoy tratando de simplemente recorrer cada objeto en esa matriz, encontrar esa tarjeta, encontrar el producto en la base de datos, establecer el producto en +1 (ya que cada tarjeta, puede ser la misma tarjeta, pero será un objeto diferente), por lo tanto, simplemente necesito aumentar el countInStock en stock en 1, cuando llegue a este punto final, volverá a colocarse en el objeto de stock 1, pero aparentemente ignorará el otros objetos en el ciclo forEach y no agregar más al conteo en stock, no estoy seguro de por qué funcionará una vez, pero no funcionará cada uno h iteración.

código:

 /** * @description This function removes a deck from the database, and re-seeds whatever cards where in that deck * back into the sellable stock * * @route DELETE /api/deck/:deckId * @param deckId ObjectID of the deck * @comment hitting this route will change the countInStock value of the {product} * in the database by whatever cards where in the [deck.cards] * */ module.exports = asyncHandler(async (req, res) => { try { // find the deck const deck = await Deck.findById(req.params.id); // check if it exists if (!deck) { return res .status(404) .json({ message: `Deck: ${req.params.id} cannot be found` }); } // we need to run a foreach command over every object in [deck.cards] await deck.cards.forEach(async (c) => { console.log(c); // find the card const card = await Card.findById(c._id); // We then need to find the sellable { Product } and add back to it, so it can be sold/traded const product = await Product.findById(card.productId); // increase the amount of inStock sellable items, by 1. await product.set({ countInStock: product.countInStock + 1 }); await product.save(); // if we get here we want to remove the card object from the database, its just a placeholder. await card.remove(); }); // remove the deck await deck.remove(); res.status(200).json({ success: true }); } catch (error) { console.error(error); res.status(500).json({ message: `Server Error: ${error.message}` }); } });
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Intentaré describir la explicación dada por @jfriend00 tanto como sea posible.

Muchos, incluyéndome a mí, pensaron que forEach es una versión simplificada del ciclo for , pero la verdad es que IT IS NOT cuando se trata de la async await . Por ejemplo, tomemos este código:

 const loopThis = [1, 2, 3, 4]; function timeOut2000() { return new Promise(resolve => setTimeout(resolve, 1000)); } async function loopThrough() { await loopThis.forEach(async x => { await timeOut2000(); console.log(x) }); } loopThrough()

Al ejecutar lo anterior, podemos ver que no espera el timeOut2000 en cada ciclo, porque no espera que se resuelva cada promesa.

Para lograr la async await para cada ciclo, podemos usar for loop o for .. in .. como se muestra a continuación:

 const loopThis = [1, 2, 3, 4]; function timeOut2000() { return new Promise(resolve => setTimeout(resolve, 1000)); } async function loopThrough() { for (const x of loopThis) { await timeOut2000(); console.log(x) }; } loopThrough()

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