使用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
相关产品推荐
相关产品推荐

