Estoy desarrollando un importador, para cada categoría tengo que crear la categoría y sus tamaños, por ejemplo en este JSON de entrada:
const input_json = { "categories": [ { "title": "category title", "sizes": [ { "title": "size title", "slices": 8, "flavors": 4, }, { "id" : "", "title": "size title 2", "slices": 8, "flavors": 4, } ] } ] }
pero el problema es que los tamaños necesitan saber la identificación de la categoría, así que estoy tratando de hacerlo así:
const prepareCategories = (body) => { let category_promises = [] for (let i = 0; i < body.categories.length; i++) { const categoryBody = body.categories[i] let object_category = { ...... } // set the object categoryPromise = nmCategorySvcV2.create(object_category) categoryPromise.size = categoryBody.sizes category_promises.push( categoryPromise, ) } return category_promises } ...... let category_promises = prepareCategories(input_json) // passing the input Promise.all(category_promises).then((categories) => { console.log(categories) })
pero cuando veo el resultado de Promise.all, la propiedad de tamaños no se muestra, solo las propiedades de la categoría realmente creada.
¿Qué estoy haciendo mal?
Está configurando el size
de la promesa (que no tiene ningún significado). En su lugar, debe esperar a que se resuelva la promesa y luego establecer el tamaño en su resultado:
const categoryPromise = nmCategorySvcV2.create(object_category) .then(result => Object.assign(result, { size: categoryBody.sizes }))
(Por cierto, te faltaba una declaración para categoryPromise
).
El código podría volverse un poco más claro usando la sintaxis de await
:
const prepareCategories = body => body.categories.map(async categoryBody => { const object_category = { //...... } // set the object const categoryData = await nmCategorySvcV2.create(object_category) categoryData.size = categoryBody.sizes return categoryData })