如何从async/await回调函数获取返回值?GCP存储桶文件夹查询问题
问题根因
- 代码同时混用了
bucket.getFiles()的回调写法和async/await异步等待逻辑:当你给getFiles传入回调函数时,方法不会返回Promise,此时await操作没有实际作用,回调的返回值也不会被赋值给外层的models变量。 - 要获取存储桶内的文件夹列表,必须在查询参数中配置
delimiter: '/',否则GCP不会返回文件夹前缀集合。
修复后代码
export async function getTritonModels(bucketName, path) { try { const bucket = storage.bucket(bucketName); // 配置查询参数,delimiter设置为/用于识别文件夹层级 const query = { prefix: path, delimiter: '/', autoPaginate: false }; // 不传回调,直接await获取返回结果 const [files, nextQuery, apiResponse] = await bucket.getFiles(query); // 提取前缀集合作为文件夹列表,增加空值兜底 const models = [...(apiResponse?.prefixes || [])]; console.log("models:", models); return models; } catch (err) { console.error("获取文件夹列表失败:", err); return []; } }
核心修改说明
- 移除
getFiles的入参回调,直接通过await接收方法返回的Promise结果,返回数组的第三个元素即为你需要的apiResponse对象 - 补充查询参数的
delimiter: '/'配置,触发GCP返回同级文件夹的前缀集合 - 增加空值兜底逻辑,避免
apiResponse.prefixes为空时数组展开报错 - 补充try块内的返回语句,保证函数正常执行时也能返回拿到的文件夹列表
内容的提问来源于stack exchange,提问作者ashes999
相关产品推荐
相关产品推荐

