Microsoft Graph Client Promise问题:.then()参数始终为undefined
问题原因及解决方案
问题出在你使用client.api(...).get()的方式上:
- 当你给
.get()方法传递回调函数时,它会采用回调模式执行,不会返回Promise。这意味着外层的await无法获取回调里返回的res.value,当前.then()块实际没有返回有效数据,所以下一个.then()的users参数自然是undefined。 - 回调函数里的
return res.value不会被Promise链捕获,因为回调是独立的执行上下文,和外层Promise逻辑无关。
修复方案
去掉.get()的回调函数,让它返回Promise,这样就能通过await获取响应结果:
await this.props.context.msGraphClientFactory .getClient('3') .then(async (client: MSGraphClientV3) => { try { const res = await client .api(`/groups/${this.state.group?.id}/members`) .version("v1.0") .get(); // 不传回调,让方法返回Promise return res.value; } catch (err) { console.error(err); throw err; // 抛出错误以便后续处理 } }) .then(async (users: Array<MicrosoftGraph.User>) => { // 现在users能正确获取到成员列表了 // ...你的业务逻辑 }) .catch(err => { // 统一处理所有错误 console.error(err); });
更简洁的写法(推荐)
把Promise链换成await链式调用,代码结构更清晰,避免嵌套:
try { // 获取Graph Client const client = await this.props.context.msGraphClientFactory.getClient('3'); // 调用API获取组成员 const res = await client .api(`/groups/${this.state.group?.id}/members`) .version("v1.0") .get(); // 提取用户列表 const users = res.value; // 处理用户列表的逻辑 // ... } catch (err) { // 统一捕获所有错误 console.error(err); }
内容的提问来源于stack exchange,提问作者dns_nx
相关产品推荐
相关产品推荐

