我有一个函数,该函数遍历对象数组并根据一些参数构建对象。它应该返回构建对象
代表我将要设置的组件的状态对象。但是,我想使用Array.foreach
,但是我不知道在foreach循环完成后如何调用该函数。
该函数看起来像这样:
buildStateObject= (someArray: Array) => {
let stateobject= {};
someArray.foreach(item => {
switch (item.Someparameter) {
case 1:
stateobject.someProp1= item.message;
break;
case 2:
stateobject.someProp2= item.message;
break;
// code omitted
}
});
return stateobject;
};
在我的组件中,我有类似的东西显然不起作用:
if(someJson.jsonArray)
this.setState(this.buildStateObject(someJson));
所以我要寻找的是这样的:
Promise.all(buildStateObject).
then((theResultObjectMaybe)=>{this.setState(theResultObjectMaybe);})
我试图弄清楚这一点,但我无法。我也不确定这是否是个好习惯。
[编辑]
@PaulJanicki感谢您指出错误。只是类型错误。但是,您指出的一个错误也是在我的代码中,它导致了Unhandled promise rejection
,而我认为这是因为forEac
h是异步的,并且尚未处理结果。
问题是类型错误foreach
而不是正确的forEach
答案 0 :(得分:1)
在buildStateObject
函数中,forEach方法之外的return语句丢失了。另外forEach
应该是camelCase。
function buildStateObject(someArray) {
let stateobject = {};
someArray.forEach(item => {
switch (item.someparameter) {
case 1:
stateobject.someProp= item.message;
break;
case 2:
stateobject.someProp= item.message;
break;
// code omitted
}
});
return stateobject;
}
function setState(state) {
console.log(state);
}
var someJson = [{
message: 'first',
someparameter: 1
}, {
message: 'second',
someparameter: 2
}]
setState(buildStateObject(someJson))
还要考虑到stateobject.someProp
将在每次循环执行时被覆盖,不确定是否是预期的行为。