如何在numberOne.ts与numberTwo.ts之间传递API响应结果
解决跨文件传递异步API响应的问题
看起来你遇到的核心问题是异步操作的结果无法直接同步传递——你的getDealStatusInfo里调用的DealApiControllers.GetDealStatus是异步的,当函数执行完毕时,回调还没触发,所以外部的statusRes根本拿不到有效数据。下面给你两种简单可行的解决方案:
方案1:用Promise封装异步调用(推荐)
把getDealStatusInfo改成返回Promise的形式,这样就能在numberTwo.ts里用async/await优雅地获取结果:
numberOne.ts 改造
// 最好把any替换成你的API响应实际类型,比如interface DealStatusResponse { ... } export function getDealStatusInfo(): Promise<any> { const dealid = 111; return new Promise((resolve, reject) => { DealApiControllers.GetDealStatus( dealid, (response) => resolve(response), // 成功时把结果传给Promise (error) => { console.error(error); reject(error); // 失败时抛出错误 } ); }); }
numberTwo.ts 调用
import { getDealStatusInfo } from './numberOne'; // 必须在async函数里使用await async function handleDealStatus() { try { const statusRes = await getDealStatusInfo(); // 在这里直接使用API响应结果,比如渲染、业务逻辑处理 console.log('拿到的交易状态:', statusRes); } catch (error) { // 处理API调用失败的情况 console.error('获取交易状态失败:', error); } } // 执行函数 handleDealStatus();
方案2:通过回调函数传递结果
如果不想用Promise,也可以给getDealStatusInfo传入回调函数,让API响应触发时直接调用这个回调:
numberOne.ts 改造
// 定义回调类型,同样建议替换any为实际类型 export function getDealStatusInfo( onSuccess: (response: any) => void, onError?: (error: any) => void ) { const dealid = 111; DealApiControllers.GetDealStatus( dealid, (response) => onSuccess(response), // 成功时调用成功回调 (error) => { console.error(error); onError?.(error); // 失败时调用错误回调(可选) } ); }
numberTwo.ts 调用
import { getDealStatusInfo } from './numberOne'; getDealStatusInfo( (statusRes) => { // 在这里使用响应结果 console.log('拿到的交易状态:', statusRes); }, (error) => { console.error('获取失败:', error); } );
为什么原来的代码不行?
你原来的代码里,statusRes是在异步回调里赋值的,但getDealStatusInfo函数本身会在API调用还没完成时就执行完毕,这时候statusRes还是undefined,自然没法传递到其他文件。异步操作的结果必须通过Promise/async-await或者回调函数这种异步方式来传递,不能像同步变量那样直接赋值获取。
内容的提问来源于stack exchange,提问作者user2720913
相关产品推荐
相关产品推荐

