JavaScript调用封装Google API的函数返回数组得到undefined求助
问题根因
- 你定义的
listGroups函数没有设置外层返回值,默认返回undefined,这是你调用时拿到undefined的直接原因。 service.groups.list是异步API,你在它的回调函数内写的return list仅作用于回调函数本身,无法把值传递到外层的listGroups函数。且你同步调用listGroups时,API请求还没完成,回调函数还没执行,list数组还没被填充数据。
修复代码
listFunction.mjs 改造
把listGroups封装为返回Promise的函数,用resolve抛出成功结果,reject抛出错误:
import { google } from 'googleapis'; export function listGroups(auth) { return new Promise((resolve, reject) => { const service = google.admin({version: 'directory_v1', auth}); const list = []; service.groups.list({ customer: 'my_customer', orderBy: 'email', maxResults: 10, sortOrder: 'ASCENDING', }, (err, res) => { if (err) { console.error('API返回错误:', err.message); return reject(err); } const groups = res.data.groups; groups.forEach((group) => { list.push(group.email); }); resolve(list); }); }) }
testCallApi.mjs 改造
异步返回的Promise需要用await或者then接收结果:
// 方式1:async/await 写法 (async () => { const groupList = await listGroups(callAPI()); console.log(groupList); })(); // 方式2:then 写法 listGroups(callAPI()) .then(groupList => console.log(groupList)) .catch(err => console.error('获取失败:', err));
内容的提问来源于stack exchange,提问作者clement merger
相关产品推荐
相关产品推荐

