TypeScript中Promise已fulfilled但始终返回pending状态该如何解决?
问题原因
- Promise 链式调用特性:
then()方法本身会返回一个全新的 Promise 实例,你当前代码将then()的返回值直接赋值给data变量,拿到的自然是处于 pending 状态的 Promise 对象,而非接口返回的最终结果。 - 异步代码执行逻辑问题:JavaScript 中异步任务不会阻塞主线程同步执行,你在同步上下文中直接读取
data时,接口请求还未完成,Promise 还未被触发 fulfilled 回调。 - 函数名大小写不匹配:你封装导出的工具函数是大写开头的
GetData,但调用时写的是小写开头的getData,如果没有做小写别名导出,这里会出现引用错误,也会导致返回结果不符合预期。
解决方案
方案1:使用 async/await 语法(更推荐)
所有依赖接口返回结果的逻辑,都要放在 await 关键字之后执行,示例代码如下:
// 需要在被 async 标记的函数内部使用 await const handleRequest = async () => { try { // 注意函数名大小写要和导出时保持一致 const data = await GetData(["1", "3", "56"], true); // 拿到结果后在这里处理业务逻辑 console.log("请求结果:", data); } catch (err) { // 捕获请求报错逻辑 console.error("请求失败:", err); } } // 执行请求函数 handleRequest();
方案2:在 then 回调内部处理业务逻辑
不要将 then() 的返回值赋值给外层变量,所有需要用到请求结果的逻辑,都放在 then 的回调函数中执行:
GetData(["1", "3", "56"], true) .then(result => { // 所有依赖 result 的逻辑都在这里执行,或者传入其他处理函数 console.log("请求结果:", result); processBusinessData(result); }) .catch(err => { console.error("请求失败:", err); })
注意:不要尝试将异步请求的结果直接赋值给外层变量后在同步上下文读取,这是 JavaScript 异步编程的常见误区,所有依赖异步结果的逻辑必须在异步回调、或者
await之后的代码中执行。
内容的提问来源于stack exchange,提问作者fellinlovewithaman
相关产品推荐
相关产品推荐

