module.exports.checkoutMany = async (data) => { let tempTotalAmount = 0 data.orderDetail.forEach(async e => { let price = await Product.findById(e.productId).then(product => { console.log(`product price from forEach: ${product.price}`) return product.price }) console.log(`price * quantity: ${price} * ${e.quantity}`) tempTotalAmount += price * e.quantity console.log(`tempTotalAmount: ${tempTotalAmount}`) }) // let newOrderDetail = data.orderDetail.map(async obj => { // if(obj.keys === price) { // return obj.price = 1 // } else { // return obj // } // }) // for(i = 0; i < data.orderDetail.length; i++) { // if(data.orderDetail[i].price) ( // ) // } console.log('newOrderDetail') console.log(newOrderDetail) let newOrder = await new Order ({ userId: data.userId, orderDetail: data.orderDetail, totalAmount: tempTotalAmount }) return newOrder.save().then((order, error) => { if(error) { return false } else { return order } }) }Intenté obtener el nombre de la propiedad del objeto y asignarle un nuevo valor, pero no funcionó.
Mi objetivo es automatizar la propiedad del precio al obtenerla del modelo de producto.
A partir de ahora, se define manualmente dentro del req.body de Postman.
Gracias.
Creo que puedes lograr esto usando Array.map() como lo hiciste en tu primer intento comentado:
let arr = [ {id: 1, name: "Michael"}, {id: 2, name: "Joe"}, ] const newArr = arr.map(obj => { if (obj.id === 1) { return {...obj, name: "John"}; } else { return obj; } }); console.log(newArr);De la forma en que lo tiene ahora, está sobrescribiendo el objeto, no modificando el objeto cuando obj.price = 1. Puede usar el operador de propagación para llenar el nuevo objeto con todas las propiedades del objeto anterior y luego sobrescribir la propiedad deseada.
También está utilizando awaits en los lugares equivocados. La función de mapa y la creación de un nuevo pedido no son tareas asíncronas.