Google Drive API异步获取共享驱动器列表返回空数组问题求助
问题分析与解决方案
核心问题是异步流程时序错误:你的async函数里混用了axios.then回调和直接返回操作,导致函数在请求完成、数据推入数组前就返回了空的resultArray——then是异步执行的,函数主线程会跳过它直接执行后续的return语句。
修正方案
改用await统一处理异步请求,确保每一次分页请求完成后再继续循环,同时保证函数在所有数据获取完毕后再返回结果。
修正后的示例代码
async function getAllDrives() { const resultArray = []; let pageToken = null; do { try { // 用await替代then,等待请求完成再执行后续逻辑 const res = await axios.get('https://www.googleapis.com/drive/v3/drives', { params: { pageSize: 100, pageToken, q: 'hidden = false' // 过滤非隐藏共享驱动器 }, headers: { 'Authorization': 'Bearer 你的访问令牌' } }); // 批量推入当前页数据 resultArray.push(...res.data.drives); // 更新分页令牌,用于下一轮请求 pageToken = res.data.nextPageToken; // 这里的console.log会在请求完成后执行,能看到正确数据 console.log('当前页驱动器:', res.data.drives); } catch (err) { console.error('获取驱动器失败:', err); throw err; // 抛出错误让调用者处理 } } while (pageToken); // 有下一页令牌就继续循环 console.log('所有驱动器:', resultArray); return JSON.stringify(resultArray); }
关键注意事项
- 避免同时使用
await和.then,保持异步代码风格一致,防止时序混乱 - 确认请求参数
q: 'hidden = false'正确,确保过滤掉隐藏的共享驱动器 - 检查访问令牌的权限:需要
drive.readonly.metadata或更高权限才能读取共享驱动器列表
内容的提问来源于stack exchange,提问作者fitMath
相关产品推荐
相关产品推荐

