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

调用async异步函数无法获取resolved的返回值问题求助

问题原因

所有被async关键字修饰的函数,默认返回值都是Promise对象。你当前的写法将.then()的返回值直接赋值给userID变量,而.then()方法本身也会返回Promise实例,因此你拿到的始终是Promise对象而非异步请求返回的实际值。
同时JS异步代码不会阻塞同步代码的执行,你执行赋值操作时,getCurrentUserId内部的网络请求还未完成,Promise还处于pending状态,自然无法拿到最终结果。

解决方案

有两种常用的方式可以获取异步函数的返回值:

  • 第一种:使用await语法(推荐)
    await只能在被async修饰的函数内部使用,它会等待Promise状态变为resolved后直接返回结果值:
    // 需要将逻辑放在async修饰的函数中
    async function handleUserInfo() {
      const userID = await Reddit.getCurrentUserId();
      // 所有需要用到userID的逻辑都可以写在这里
      console.log(userID);
    }
    
    handleUserInfo();
    
  • 第二种:在.then()回调内部处理逻辑
    你无法将.then()回调的返回值拿到外层同步代码中使用,所有依赖userID的逻辑都需要放在回调函数内部:
    Reddit.getCurrentUserId().then(userID => {
      // 所有需要用到userID的逻辑都放在这个回调内
      console.log(userID);
    })
    
额外优化建议

你原有代码中的冗余逻辑可以简化:

  1. 代码中const token = await Reddit.getAccessToken().then(val => {return val;})可以直接简化为const token = await Reddit.getAccessToken(),await本身就会自动获取Promise resolve后的值,不需要额外加.then()返回
  2. 建议补充错误处理逻辑,避免请求失败导致程序报错:
    // await 搭配 try...catch 捕获异常
    async function handleUserInfo() {
      try {
        const userID = await Reddit.getCurrentUserId();
        console.log(userID);
      } catch (err) {
        console.error('获取用户ID失败:', err);
      }
    }
    

内容的提问来源于stack exchange,提问作者Davy Kamanzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:05