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

使用Promise向后续函数传递数组变量时出现TypeError报错如何解决

问题原因

Promise 内置的resolve方法仅支持传递1个返回值,你代码中resolve(numExeDetails, exercises)的第二个参数exercises会被直接忽略,导致.then回调中接收的exercises变量为undefined,访问exercises[0]时就触发了Cannot read properties of undefined的类型错误。

修复方案

你只需要将需要传递的多个参数包装为同一个对象/数组传出即可,两种实现方式如下:

方案1:用对象包装(更易读,推荐)

修改resolve传参逻辑和.then的参数接收逻辑:

// exerciseFirstColumnDetails函数的done回调内修改resolve语句
resolve({ numExeDetails, exercises });

// 调用处的then回调修改为解构接收对象属性
exerciseFirstColumnDetails()
    .then(({ numExeDetails, exercises }) => {
        loadExerciseDetails(numExeDetails, exercises)
    })
    .catch((error) => {
        console.log(error + " Error in exerciseOverview.js - call 'loadExerciseDetails' function");
    })

方案2:用数组包装

// exerciseFirstColumnDetails函数的done回调内修改resolve语句
resolve([numExeDetails, exercises]);

// 调用处的then回调修改为解构接收数组元素
exerciseFirstColumnDetails()
    .then(([numExeDetails, exercises]) => {
        loadExerciseDetails(numExeDetails, exercises)
    })
    .catch((error) => {
        console.log(error + " Error in exerciseOverview.js - call 'loadExerciseDetails' function");
    })

另外你贴出的代码里存在两处冗余括号的语法问题,exerciseFirstColumnDetails函数定义结尾、loadExerciseDetails函数定义结尾多写了),可以顺手修正避免其他语法报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:39:04