TypeScript异步方法返回Promise<PortalDetail>始终为null求助
问题分析与修复方案
核心错误:异步结果未正确返回
你的CheckUri函数中,虽然在fetch的.then回调里返回了PortalDetail实例,但这个返回值并没有成为函数的最终返回结果。函数执行完fetch的链式调用后,直接执行了return null;,所以无论内部逻辑是否生成了有效数据,最终都会返回null。
次要问题:错误被静默吞掉
你的.catch回调是空的,会吞掉所有请求或解析错误,导致无法排查潜在的异常问题;多余的.finally也没有实际作用。
修复后的代码(推荐async/await写法,可读性更高)
const CheckUri = async (organisationCode: string): Promise<PortalDetail | null> => { try { // 发起请求并等待响应 const response = await fetch(`${uris.appCode}${organisationCode}`); // 先判断响应状态是否正常 if (response.status !== 200) { return null; } // 解析响应文本,捕获解析错误 const portalUrl = await response.text().catch(() => null); // 确认portalUrl有效后返回实例 if (portalUrl) { return new PortalDetail(portalUrl, organisationCode); } return null; } catch (error) { // 打印错误日志,方便调试 console.error("请求或解析失败:", error); return null; } }
链式调用写法的修复版本
如果你偏好保留链式调用,需要将整个fetch的Promise链作为函数的返回值:
const CheckUri = async (organisationCode: string): Promise<PortalDetail | null> => { return fetch(`${uris.appCode}${organisationCode}`) .then(async (data) => { const portalUrl = await data.text().catch(() => null); if (data.status === 200 && portalUrl) { return new PortalDetail(portalUrl, organisationCode); } return null; }) .catch((error) => { console.error("请求失败:", error); return null; }); }
内容的提问来源于stack exchange,提问作者Code Ratchet
相关产品推荐
相关产品推荐

