我有一个函数,它从当前路径获取数据以创建一个数组([x,y,z,a,B]),然后将其传递给reduce方法以返回一个新的对象数组。我想把初始数组中的每个值都传入一个函数,该函数返回一个对象,然后把该对象添加到新数组中。然而,在它结束后,我console.log accumulate没有任何东西被打印出来,我如何使用promise来完全显示accumulate的结果?
let accumulate = path.search
.substring(1)
.split("+")
.reduce((acc, val) => {
FetchMovie(val).then((res) => {
acc.push(res);
});
return acc;
}, []);
2条答案
按热度按时间5cg8jx4n1#
传递给
.then()
的方法是异步执行的,所以acc
直到reduce操作完成后才被填充(这太晚了)。你可以使用Promise.all()
,首先将所有值Map(.map()
)到FetchMovie
函数返回的Promise:ki0zmccv2#
你不能在reducer中使用promise,除非你先解决所有的promise。一个简单的方法是拆分字符串,返回新的Promise,然后等待所有的Promise完成。
下面是一个示例: