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

调用cognitoidentityserviceprovider.getUser().promise()报TypeError问题求助

问题原因与解决方案

嘿,这个问题我之前踩过一模一样的坑!其实核心原因很简单——你在调用cognitoidentityserviceprovider.getUser()的时候同时传入了回调函数,这直接导致返回值变成了AWS.Response对象,而只有AWS.Request对象才拥有.promise()方法,所以自然会抛出promise is not a function的错误。

AWS SDK的API调用有两种互斥的模式:

  • 回调模式:当你传入回调函数作为第二个参数时,方法会立即执行请求,并直接返回AWS.Response对象(这个对象里没有.promise()方法);
  • 请求对象模式:如果不传回调函数,方法会返回一个AWS.Request对象,你可以通过这个对象调用.promise()来将请求转换为Promise,进而用async/await或者.then()来处理异步结果。

你的代码同时混用了这两种模式,这就造成了冲突。

修复后的异步实现方案

既然你的函数已经声明为async,推荐直接用async/await的方式重构代码,去掉多余的回调参数和回调逻辑:

async getUserDetails(accessToken) {
  const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
  const params = { AccessToken: accessToken };
  
  try {
    // 不传回调,拿到Request对象后调用.promise(),用await等待结果
    const userData = await cognitoidentityserviceprovider.getUser(params).promise();
    // console.log(userData);
    return userData;
  } catch (err) {
    // 这里可以根据业务需求处理错误,比如抛出错误或者返回错误信息
    console.error('获取用户详情失败:', err);
    throw err;
  }
}

调用方式

重构后,你可以在其他async函数里这样调用它:

async someOtherFunction() {
  try {
    const userDetails = await getUserDetails('你的AccessToken');
    // 在这里使用userDetails里的用户属性
    console.log('用户属性:', userDetails.UserAttributes);
  } catch (err) {
    // 处理错误
  }
}

这样就能完美异步获取用户属性,并且避免了之前的类型错误。

内容的提问来源于stack exchange,提问作者Aquiles Valdivia Orozco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:45:44