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

JavaScript中嵌套在dataService的Promise函数使用报错求助

解决Promise调用的两个常见报错

看起来你这两个报错都是Promise使用的基础问题,我来帮你拆解并修复:

错误原因分析

  1. Cannot read property 'then' of undefined:这个报错说明你的getData方法没有返回创建的Promise实例。当你调用dataService.getData().then(...)时,getData()返回了undefined,而undefined自然没有then方法。
  2. Cannot read property 'resolve' of undefined:这个问题大概率是你在Promise的回调函数里错误地使用了this.resolve()。实际上Promise构造函数的回调会直接传入resolve和reject两个函数,你直接调用这两个参数即可,不需要通过this访问——而且普通函数作为回调时,this的指向也不是Promise实例,所以会找不到resolve属性。

修复后的完整代码

// 正确实现的dataService
const dataService = {
  getData() {
    // 关键:必须返回Promise实例
    return new Promise((resolve, reject) => {
      // 生成1到10的随机数
      const randomNumber = Math.floor(Math.random() * 10) + 1;
      console.log(`生成的随机数:${randomNumber}`);
      
      if (randomNumber > 5) {
        // 直接使用构造函数传入的resolve函数
        resolve(`成功!随机数 ${randomNumber} 大于5`);
      } else {
        // 直接使用构造函数传入的reject函数
        reject(`失败!随机数 ${randomNumber} 小于等于5`);
      }
    });
  }
};

// 正确调用方式
dataService.getData()
  .then(successMsg => {
    console.log(successMsg);
  })
  .catch(errorMsg => {
    console.error(errorMsg);
  });

核心修复点说明

  • 必须返回Promise:getData方法里一定要用return把创建的Promise实例返回出去,这样调用者才能拿到Promise并使用then/catch方法。
  • 直接使用resolve/reject参数:Promise构造函数的第一个参数是一个回调函数,它会被自动传入resolve和reject两个函数,你直接调用这两个参数就行,别画蛇添足加this。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:53