¿Cómo almaceno todos los datos de resultados en la matriz pImages? Obtengo el resultado, pero en ese caso creo que la función asíncrona funcionará, pero no sé cómo aplicarla. por favor ayuda mi codigo es
exports.addImage = (req, res, next) => { let imageArray = req.files.productImageArray; if (!req.files || Object.keys(req.files).length === 0) { return res.status(400).send("No files were uploaded."); } // here all images will be stored in array format let pImages = []; for (let f in imageArray) { imagekit.upload( { file: imageArray[f].data, //required fileName: imageArray[f].name, //required customMetadata: { color: req.body.productLabels[f], default: req.body.defaultProduct[f] } }, function(error, result) { if (error) console.log(error); else { console.log(result) pImages.push(result) } } ); } console.log("p", pImages); //output p [] };Gracias de antemano
Puede envolver imagekit.upload(...) en una promesa y luego esperar esta promesa.
Por lo tanto, su promesa debe resolverse o rechazarse en la devolución de llamada en imagekit.upload.
Tenga en cuenta que su método addImage ahora tiene que ser asíncrono para usar la palabra clave await y, por lo tanto, devuelve una promesa.
exports.addImage = async (req, res, next) => { let imageArray = req.files.productImageArray; if (!req.files || Object.keys(req.files).length === 0) { return res.status(400).send("No files were uploaded."); } // here all images will be stored in array format let pImages = []; for (let f in imageArray) { try{ const pImage = await new Promise((resolve,reject)=>{ imagekit.upload( { file: imageArray[f].data, //required fileName: imageArray[f].name, //required customMetadata: { color: req.body.productLabels[f], default: req.body.defaultProduct[f] } }, function(error, result) { if (error){ reject(error); } else { resolve(result) } } ); }); pImages.push(pImage); } catch(e){ console.error(e); } } console.log("p", pImages); //output p [] };Hay otras cosas en su código que no he abordado.
En la primera línea, está accediendo a req.files.productImageArray sin comprobar si está definido req.files. Esta comprobación se realiza a continuación. Por lo tanto, debe mover su primera línea después de esta verificación.
¿Es req.files.productImageArray una matriz como dice el nombre? Si es así, no debe usar un bucle for in, use un bucle for of en su lugar y en sus comprobaciones de cordura debe incluir Array.isArray (req.files.productImageArray).