Soy un nuevo programador y muy nuevo en firebase y estoy tratando de mostrar la información de los archivos de usuario actuales en la pantalla, parece que mi problema es que puedo obtener la URL y los metadatos por separado, ¿cómo los combino? ¿a ellos? ¿Cómo puedo tomar todo a la vez? Necesito mostrar el nombre del archivo, fecha, hora, enlace para descargar.
const getUserFiles = async () => { if (!userUID) { return null; } let listRef = storageRef.child(userUID); listRef.listAll().then(res => { // res.prefixes.forEach((item) => { // }); res.items.forEach(item => { item.getMetadata().then(item => { var file = { name: item.name.toString(), timeCreated: item.timeCreated.toString(), link: '', }; myFiles.push(file); }); }); res.items.forEach(item => { let counter = 0; item.getDownloadURL().then(url => { myFiles[counter].link = url.toString(); }); }); }); console.log(myFiles); };el método actual no funciona! y observe que el userUID es solo el uid sin el usuario (estado local)
¡Gracias!
El problema es con las llamadas asincrónicas. Está realizando una llamada asíncrona en forEach y forEach espera una función síncrona .
Puede cambiar la lógica para usar for-of en su lugar.
Vea abajo:
const getUserFiles = async () => { if (!userUID) { return null; } let listRef = storageRef.child(userUID); const res = await listRef.listAll(); for (const itemRef of res.items) { const itemMetadata = await itemRef.getMetadata(); const url = await itemRef.getDownloadUrl(); var file = { name: itemMetadata.name.toString(), timeCreated: itemMetadata.timeCreated.toString(), link: url, }; myFiles.push(file); } console.log(myFiles); }