Soy un novato en javascript asíncrono. Quiero usar un método asíncrono para cada uno con Promise Array, pero en javascript await solo es válido para la función asíncrona, pero no podemos marcar una función de devolución de llamada como asíncrona. Sé que cometo un error lógico. ¿Cómo puede lograr eso? ¿Alguna ayuda?
También puedes darme un consejo sobre ese infierno if-else. ¿Cómo puedo evitar ese infierno if-else?
Mi intento con 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 }); }); });