You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:47:09