如何解决为什么flatMap不删除空数组?
我有一个flatMap函数,可获取并返回数组中每个项目的数据。如果item没有某些信息,它也会返回一个空数组。自从我使用flatMap以来,我一直期望它会删除所有空数组,但完成的数组仍包含它们。
功能:
Promise.all(
array.flatMap(async (item) => {
const fetchedData = await fetch(`${item.url}`)
.then(response => response.json())
.then(data => data.stats.length ? data : null);
return fetchedData ? { ...fetchedData } : [];
})).then(data => console.log(data));
此外,当我使用 console.log(data.flat())而不是 console.log(data)记录数据时,所有空数组均被删除,但是它将需要遍历数组一次。有什么想法为什么flatMap不能自己做?
解决方法
这是因为你在 flatMap
中的回调是一个 async
函数,所以无论如何它总是返回一个 Promise。假设 array
有两个项目,第一个将获取数据,第二个不获取数据,以下是将发生的情况的示例:
array
是:[item1,item2]
在 flatMap
的映射部分之后,您会得到 [Promise(pending),Promise(pending)]
(请注意,映射是即时的,它不会等待异步函数完成,它只是从它们那里获得承诺)。
在展平部分之后,您会得到 [Promise(pending),Promise(pending)]
(请注意,这与上面的行相同 - 承诺不能展平。)。
Promise.all.then() 等待每个 promise 得到解决,并将结果作为 data
传递,您记录的结果是 [someObject,emptyArray]
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。