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

TypeScript中异步回调如何正确返回获取的Steam库存数据?

问题根因

你代码返回undefined是两个原因导致的:

  • 写的return inventory属于getUserInventoryContents传入的回调函数内部,这个返回值只会被回调函数本身接收,根本不会传到外层的getUserInv函数里。
  • getUserInventoryContents是发起网络请求拉取库存的异步方法,不会阻塞后续代码执行。你同步调用getUserInv的时候,网络请求还没返回结果,getUserInv本身没有写任何return语句,执行完就直接结束了,自然拿到undefined。
正确修改方式

把回调风格的异步方法包装为Promise,用async/await语法拿异步返回的结果,这也是TS/JS里处理异步逻辑的通用标准写法,修改后代码如下:

// 如果你定义了库存数据的TS类型,可以把返回值里的any[]替换成对应类型
function getUserInv(steamid: string): Promise<any[]> {
  return new Promise((resolve, reject) => {
    manager.getUserInventoryContents(steamid, 440, 2, true, (err, inventory) => {
      if (err) {
        console.error('拉取库存出错:', err);
        reject(err);
        return;
      }
      resolve(inventory);
    });
  });
}

// 调用示例:await必须在async函数内使用
async function run() {
  const myInventory = await getUserInv('<my steamid>');
  console.log(myInventory);
}
run();

如果你不想用async/await,也可以用.then()的方式接收结果:

getUserInv('<my steamid>')
  .then(inventory => {
    console.log(inventory);
  })
  .catch(err => {
    console.error('获取库存失败', err);
  });
注意事项
  • JS/TS里所有网络请求、文件读写这类异步操作,都不可能通过同步return的方式直接拿到结果,不要试图用外层定义变量赋值的方式绕开异步逻辑,那样只会拿到还没赋值的空值。
  • 回调函数里的return和外层函数的return没有任何关系,不要搞混两个函数的作用域。

内容的提问来源于stack exchange,提问作者Such Max

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:12:24