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

如何让函数返回的Promise立即resolve?为何调用后数据为undefined?

问题原因分析及修复方案

咱们来一步步拆解你遇到的问题:

你的getBrands方法里,核心问题出在Promise的链式传递和返回值处理上:

  • 你创建的Promise p 是通过 resolve() 直接完成的,但这里没有传递任何参数,所以这个Promise最终resolved的值就是undefined。
  • 你在p.then()里返回了{'a': 1, 'b': 2},但then()方法本身会返回一个全新的Promise,这个新Promise才会把你返回的对象作为它的resolved值。可你最后返回的是原来的p,而不是这个新的Promise,所以外部调用getBrands()时,拿到的还是那个resolved值为undefined的原始Promise,自然打印出来的data就是undefined了。

修复方案(三种可选)

方案1:直接在resolve中传递目标数据

最直接的方式,既然你要立即resolve并返回数据,直接把数据传给resolve即可:

class BrandsDataFetcher extends BaseDataFetcher {
  getBrands() {
    return new Promise((resolve, reject) => {
      // 直接把要返回的数据传给resolve
      resolve({'a': 1, 'b': 2});
    });
  }
}

方案2:返回then链式后的新Promise

如果你的实际场景中需要在then里做一些额外操作(比如预处理数据),记得要把then返回的新Promise返回出去:

class BrandsDataFetcher extends BaseDataFetcher {
  getBrands() {
    const p = new Promise((resolve, reject) => resolve());
    // 返回then生成的新Promise,而不是原始的p
    return p.then(() => {
      return {'a': 1, 'b': 2};
    });
  }
}

方案3:用Promise.resolve简化代码

因为你是要立即resolve一个值,完全可以用Promise.resolve()这个快捷方式,省去手动创建Promise的步骤:

class BrandsDataFetcher extends BaseDataFetcher {
  getBrands() {
    // 直接返回一个已resolve的Promise,值为目标对象
    return Promise.resolve({'a': 1, 'b': 2});
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:11