提问人:ZAky 提问时间:11/15/2023 最后编辑:H.B.ZAky 更新时间:11/15/2023 访问量:16
使用 SveteKit 延迟承诺数据
Delayed promise data with SveteKit
问:
我需要从 firestore 存储 api 获取文件名列表
async function gcsFilesList(uid: string): Writable<T> {
let ret: string[] = []
let store = writable(ret);
if (browser) {
const storage = firestorage();
const listRef = ref(storage, `gs://bucket_name/folder_name`);
listAll(listRef)
.then((res) => {
res.prefixes.forEach((folderRef) => {
listAll(folderRef).then(subRes => {
subRes.items.forEach((itemRef) => {
if (itemRef.fullPath.endsWith(".pdf")) {
ret.push(itemRef.fullPath)
console.log("store item", ret)
}
});
})
});
})
.catch((error) => {
console.log("list error", error)
});
}
return store
}
export const filesList = gcsFilesList
在+page.ts中,我调用了这个函数
/** @type {import('./$types').PageLoad} */
export async function load({ params }: { params: any }) {
let ret = {
data: getWork(params.id),
files: filesList(params.id)
};
return ret
}
在 +page.svelte 中,我使用这些数据
onMount(async () => {
filesData = data.files;
}
{#await filesData}
<p>...waiting</p>
{:then files}
<p>list of files {files}</p>
{:catch error}
<p style="color: red">{error.message}</p>
{/await}
.
.
//OR
{#if $filesData != null}
{#each $filesData as pfds}
<p>{pfds}</p>
{/each}
{/if}
无论如何,呈现的列表都是空的,几秒钟后,我看到函数返回的对象 (ret) 正在填充数据。但这些数据不会在 HTML 中呈现。
我需要做什么才能在数据出现时呈现数据。
答: 暂无答案
评论