如何将Google Drive集成代码中的Promise转为async/await语法
将Google Drive集成代码中的Promise转为async/await语法
改写思路
把原箭头函数声明为async函数,用await替代.then()链式调用,异步操作的错误处理用try/catch块替代.then()的第二个回调参数,完全保留原代码逻辑,仅优化写法的简洁性和可读性。
第一个函数:listFiles 改写后
const listFiles = async () => { setLoading(true); try { const response = await gapi.client.drive.files.list({ pageSize: 500, fields: 'nextPageToken, files(id, name, mimeType, modifiedTime)', }); setLoading(false); const res = JSON.parse(response.body); setDocuments(res.files); } catch (err) { setLoading(false); // 原代码未处理错误,可按需补充日志或提示逻辑 console.error('获取文件列表失败:', err); } };
改动说明:
- 函数添加
async关键字,标记为异步函数 - 用
await等待文件列表接口的异步返回结果 - 新增
try/catch块(推荐),确保出错时也能重置加载状态,避免页面一直处于加载状态
第二个函数:initClient 改写后
const initClient = async () => { setLoading(true); try { await gapi.client.init({ apiKey: API_KEY, clientId: CLIENT_ID, discoveryDocs: DISCOVERY_DOCS, scope: SCOPES, }); setConnectStorage(true); gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus); updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get()); setLoading(false); } catch (error) { setLoading(false); alert(error); } };
改动说明:
- 函数添加
async关键字,标记为异步函数 - 用
await等待客户端初始化的异步结果 - 原
.then()的成功回调逻辑直接放在await之后执行,失败回调逻辑移至catch块中 - 保证无论初始化成功或失败,加载状态都会被正确重置
内容的提问来源于stack exchange,提问作者ABs
相关产品推荐
相关产品推荐

