【发布时间】:2020-12-18 00:30:09
【问题描述】:
我尝试查看其他问题,但找不到合适的解决方案。我正在检索一个 GET 响应并将其存储到一个变量中,然后我解析该数组以查找每日发生的事件。该代码有效,但一旦到达 forEach 就会抱怨:
Cannot read property 'forEach' of undefined
。这是我的代码:
var myObj;
fetch('https://blashblashblash.com?param1')
.then(res=>res.json())
.then(data=>myObj= data)
.then(() => console.log(myObj));
var myRes = [];
myObj.forEach(function (elem) {
var date = elem.CreationDate.split(' ')[0];
if (myRes [date]) {
myRes [date] += 1;
} else {
myRes [date] = 1;
}
});
这就是 myObj 完成后的内容:
[{Id, Var1, Var2, CreationDate},
{1, 123, Var2, 2020-12-11},
{2, 1234, Var2, 2020-12-12},
{3, 12345, Var2, 2020-12-12},
{4, 1234, Var2, 2020-12-13},
{5, 321, Var2, 2020-12-15},
{6, 3214, Var2, 2020-12-15},
{7, 5432, Var2, 2020-12-16}]
我哪里错了?如果我在不同的步骤中执行代码,它可以正常工作。
编辑: 这是我更新的代码:
var myObj;
var myRes= [];
fetch('https://blashblashblash.com?param1')
.then(res=>res.json())
.then(data=>myObj= data)
.then(() => {
myObj.forEach(function (elem) {
var date = elem.CreationDate.split(' ')[0];
if (myRes[date]) {
myRes[date] += 1;
} else {
myRes[date] = 1;
}
});
});
var finalResult= {};
dates.forEach(date => {
if(!myRes.hasOwnProperty(date)) {
finalResult[date] = 0;
} else {
finalResult[date] = myRes[date];
}
return finalResult;
});
如果我正在执行整个我的 finalResult 是空的,而如果我在块中执行它它可以工作。如果我将 myRes =[] 插入最后一个 . 然后它抱怨它找不到它。我哪里错了?
【问题讨论】:
-
您不能从这样的提取中返回数据。要么把所有依赖
myObj的东西放在 then 中,要么使用 aysnc/await。 -
但如果我分两步执行代码,这将正常工作。我该如何解决?
-
@evolutionxbox 我试过了,但我不明白如何解决。检索到其中的值后,需要对该对象执行一些操作
-
你可以。要么在附加的 then 中执行操作,要么等待 fetch。
标签: javascript arrays foreach