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
相关产品推荐
相关产品推荐

