如何在 Firebase 存储中获取用户详细信息?
How do I get user details in Firebase Storage?
我是一名新程序员,也是 firebase 的新手,我正在尝试让当前用户文件信息显示在屏幕上,看来我的问题是我可以获得 URL和元数据分开,我如何将它们组合起来?我怎样才能一次拿走所有东西?
我需要显示文件名、日期、时间,link 才能下载。
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);
};
目前的方法不行!并注意 userUID 它只是没有用户的 uid(本地状态)
谢谢!
问题出在异步调用上。您正在 forEach
和 forEach expects a synchronous function.
中进行异步调用
您可以更改逻辑以改为使用 for-of。
见下文:
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);
}
我是一名新程序员,也是 firebase 的新手,我正在尝试让当前用户文件信息显示在屏幕上,看来我的问题是我可以获得 URL和元数据分开,我如何将它们组合起来?我怎样才能一次拿走所有东西? 我需要显示文件名、日期、时间,link 才能下载。
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);
};
目前的方法不行!并注意 userUID 它只是没有用户的 uid(本地状态)
谢谢!
问题出在异步调用上。您正在 forEach
和 forEach expects a synchronous function.
您可以更改逻辑以改为使用 for-of。
见下文:
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);
}