为什么flatMap不删除空数组?

时间:2020-10-15 13:33:36

标签: javascript arrays reactjs function 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不能自己做?

1 个答案:

答案 0 :(得分:0)

这是因为你在 flatMap 中的回调是一个 async 函数,所以无论如何它总是返回一个 Promise。假设 array 有两个项目,第一个将获取数据,第二个不获取数据,以下是将发生的情况的示例:

array 是:[item1, item2]

flatMap 的映射部分之后,您会得到 [Promise(pending), Promise(pending)](请注意,映射是即时的,它不会等待异步函数完成,它只是从它们那里获得承诺)。

在展平部分之后,您会得到 [Promise(pending), Promise(pending)](请注意,这与上面的行相同 - 承诺不能展平。)。

Promise.all.then() 等待每个 promise 得到解决,并将结果作为 data 传递,您记录的结果是 [someObject, emptyArray]

相关问题