You need to enable JavaScript to run this app. Promise报Uncaught TypeError: func_get_db_data is not a function如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Promise报Uncaught TypeError: func_get_db_data is not a function如何解决

问题根源

  • 初始代码错误原因:func_get_db_data被直接赋值为Promise实例,不是可调用的函数,调用func_get_db_data()自然会抛出「不是函数」的错误
  • 后续修改版错误原因:
    1. 传入Promise构造函数的executor函数只有调用resolve()才会触发状态变更,直接return的数组不会被当作Promise的返回值
    2. 直接打印Promise实例无法拿到内部数据,异步结果必须在then回调中或者用await获取

正确实现(完全符合你要求的调用形式)

两种写法都可以满足需求:

写法1:手动返回Promise

let func_get_db_data = () => {
  return new Promise((resolve, reject) => {
    resolve([
      {name: 'Bob', gender:'m', class:'junior', job: 'Teacher'},
      {name: 'Dan', gender:'m', class:'senior', job: 'Detective'},
      {name: 'Ann', gender:'f', class:'junior', job: 'Analyst'},
      {name: 'Sue', gender:'f', class:'retired', job: 'Accountant'}
    ]);
  });
};

// 完全匹配你要求的调用形式,打印操作要放在then回调内才能拿到数据
func_get_db_data().then( (data) => {
  console.log(data);
  const tableData = data;
  // 所有对tableData的后续操作都要放在这个回调作用域内
});

写法2:用async语法简化

// async函数本身默认返回Promise,调用逻辑完全不变
let func_get_db_data = async () => {
  return [
    {name: 'Bob', gender:'m', class:'junior', job: 'Teacher'},
    {name: 'Dan', gender:'m', class:'senior', job: 'Detective'},
    {name: 'Ann', gender:'f', class:'junior', job: 'Analyst'},
    {name: 'Sue', gender:'f', class:'retired', job: 'Accountant'}
  ];
};

func_get_db_data().then(data => console.log(data));

补充说明

不要试图在同步代码中直接拿到Promise的返回值,JavaScript的异步执行规则决定了同步代码一定会先于异步回调执行,同步阶段打印Promise只能拿到 pending 状态的容器对象,无法获取最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 21:36:03