Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Wait for async forEach that in a callback function to finished then return data

I'm a newbie in asynchronous javascript. I want to use an async forEach with Promise Array method but In javascript await is only valid for the async function but we can not mark a callback function as an async. I know I make a logical mistake. How can achieve that? Any Help?

Also you can give me an advise about that if-else hell. How can I avoid that if-else hell.

My try with Promise Array:

router.get("/", async (req, res) => {
  const token = req.cookies.jwt;
  let cartObjects = [];
  cartRequests.getCart( token, (cartError, cartData) => {
    if (cartError) {
      return res.status(400).render('error', {message: cartError})
    }    

    if(cartData.error)
    {
      if (cartData.error==="There is no cart created for this user") {
        return res.status(200).render("cart/cartPage", { cartObjects });
      }
      else if(cartData.error === "Invalid Token"){
        return res.status(200).render('error', {message: 'Not authenticated.'})
      } else{
        return res.status(400).render('error', {message: cartData.error})
      }
      
    }

    const cartItems = cartData.items;
    let cartItemIndex = 0;
    let promises = []

    cartItems.forEach(async (item) => {
      let productId = item.productId;
       promises.push( new Promise((resolve, reject) => {
        productRequets.getProductById(productId, (productErr, productData) => {
          if (productData.error) {
            reject(productData.error);
          } else {
            let cartObject = getCartObject(
              productData,
              cartItems,
              cartItemIndex
            );
            resolve(cartObject);
          }
        });
      }))
        .catch((err) => {
          
        })
        .then((resolvedData) => {
          cartObjects.push(resolvedData);
        });
    });
    
    await Promise.all(promises)
    return res.status(200).render("cart/cartPage", { cartObjects });
  });
});
about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda