NodeJS应用调用Microsoft Graph客户端时await未等待请求完成问题
问题排查与解决方法
1. 修正authProvider的错误写法
你当前的authProvider写法存在逻辑错误,不符合Microsoft Graph JS SDK的要求:
你写的箭头函数内部的getAccessToken: () => {}属于JS标签语法,并没有返回带getAccessToken方法的合法对象,SDK无法正常获取访问令牌,会导致请求一直处于等待身份信息的挂起状态。
正确写法如下:
// 直接返回带getAccessToken方法的对象即可 const authProvider = { getAccessToken: () => { return accessToken; } }; // 如果需要异步获取token,可改成异步方法 const authProvider = { getAccessToken: async () => { // 可在此处添加获取token的异步逻辑 return accessToken; } };
2. 检查上层调用逻辑是否等待异步函数执行完成
createGroup是异步函数,如果你上层调用时没有加await,也没有通过.then()监听执行状态,Node.js事件循环会判定没有待处理的任务,在Graph请求返回前就直接退出进程,自然不会打印end2或demo3。
错误调用示例:
// 没有加await,函数还没执行完进程就退出 createGroup(url, '测试组', token, ownerId);
正确调用示例:
// 方式1:使用await(需要放在async函数内部) async function main() { const result = await createGroup(url, '测试组', token, ownerId); console.log('函数执行完成', result); } main(); // 方式2:使用.then().catch()处理 createGroup(url, '测试组', token, ownerId) .then(res => console.log('执行成功', res)) .catch(err => console.log('执行失败', err));
3. 附加排查项
- 检查传入的
accessToken是否有效,是否拥有创建Group的相关权限(Group.Create等应用权限) - 可以给SDK开启调试日志,定位请求各阶段的问题:
const client = graph.Client.init({ authProvider, debugLogging: true })
- 检查当前网络是否能正常访问
graph.microsoft.com,是否存在代理或防火墙拦截请求的情况
内容的提问来源于stack exchange,提问作者Gerrit
相关产品推荐
相关产品推荐

