我想在收集所有文件路径后返回,但函数返回空列表。
async function gcsFilesListTwo(uid: string): Promise<string[]> {
let ret: string[] = []
if (browser) {
const storage = firestorage();
const listRef = ref(storage, `gs://bucket/folder`);
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)
}
});
return ret;
// I want to return here after adding all files
//But this happens after the function return
})
});
})
.catch((error) => {
console.log("list error", error)
});
return ret
}
return ret
}
字符串
2条答案
按热度按时间h43kikqp1#
你现在所做的,就是把
async
和then/catch
回调混合在一起。两者只能选其一,不能两者都选。但是,正如@DougStevenson在他的评论中也提到的,如果你想把你的函数声明为async
函数,那么您必须使用await
等待所有的承诺都被解析,这样您才能得到请求的结果。回呼。我在你的代码中看到,你使用的是一个
forEach
,但是在异步调用的情况下,它并不能像你所期望的那样工作。所以为了解决这个问题,你应该创建一个空数组,在其中你应该所有的承诺,并在最后简单地调用:字符串
更多信息如下:
83qze16e2#
虽然答案在评论中,但我在这里为像我这样的非TS程序员发布了修改后的代码。
字符串