如何解决解决错误500; “初始化之前无法访问'对象'}
正在寻求有关如何解决此错误的帮助。我试图根据每个月内发生的交易总数来获取每月的交易总数。
下面是我的代码,
exports.monthlyTotalArray = async (req,res) => {
const { userId } = req.body;
const requestMonths = [0,1,2,3,4,5,6,7,8,9,10,11];
const today = new Date();
var relevantYear = today.getYear();
try {
return await Transaction.findAll({
where: {
userId: userId,},}).then((transactions) => {
if (transactions.length == 0) {
res.status(401).json({
message: { msgBody: "No transactions found",msgError: true },});
} else {
const MonthlyArray = requestMonths.forEach((requestMonth) => {
transactions
.filter((i) => {
const date = new Date(i.date);
return (
date.getMonth() == requestMonth &&
date.getYear() == relevantYear
);
})
.reduce((prev,curr) => prev + parseFloat(curr.amount),0);
res.status(200).send({
MonthlyArray,});
});
}
});
} catch (error) {
res.status(500).send({
message: error.message || "some error occurred",});
}
};
当我尝试运行代码时出现此错误
{
"message": "Cannot access 'MonthlyArray' before initialization"
}
解决方法
似乎您正在foreach()lambda表达式中访问MonthlyArray。但是MonthlyArray实际上是由该foreach()的结果初始化的,因此您的确在初始化MonaryArray之前就在访问它。
这可能不是您想要的,但发送响应的代码部分位于lambda表达式内。
很难看到,因为代码的缩进使得很难太了解lambda表达式的结尾。
正确缩进代码很可能使代码显而易见。
,主要问题是您要在res.send({ MonthlyArray })
的回调函数中调用requestMonths.forEach
,所以这就是为什么出现错误的原因。
const MonthlyArray = requestMonths.forEach((requestMonth) => {
// you're calling it here
res.status(200).send({
MonthlyArray,});
});
// instead,it should be here
res.status(200).send({
MonthlyArray,});
另外,您可能不想使用forEach
,因为forEach
不返回任何内容,因此MonthlyArray
将是undefined
。而是使用Array.map
获得所需的结果。
if (transactions.length == 0) {
// ...
} else {
const MonthlyArray = requestMonths.map((requestMonth) => {
return transactions
.filter((i) => {
const date = new Date(i.date);
return (
date.getMonth() == requestMonth && date.getYear() == relevantYear
);
})
.reduce((prev,curr) => prev + parseFloat(curr.amount),0);
});
res.status(200).send({
MonthlyArray,});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。