Javascript “接收”;推送不是一种功能;关于JS reducer结果数组

Javascript “接收”;推送不是一种功能;关于JS reducer结果数组,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有下面的函数,它检索一个播放列表数组,然后尝试在一个新数组中使用提取的数组上的减缩器构建一个简化版本 第一次迭代显示paredPlaylists包含一个看起来像我期望的元素。在第二种情况下,它变成了一个承诺,然后给出了错误 paredPlaylists.push不是一个函数 我知道错误本身是由结果数组(paredPlaylists)解释的,它不再是一个数组,而是一个承诺。但是,它如何在第一个过程中成功地将简单对象{id:“foo”}推送到数组上,然后在第二个过程中转换为承诺呢 async fu

我有下面的函数,它检索一个播放列表数组,然后尝试在一个新数组中使用提取的数组上的减缩器构建一个简化版本

第一次迭代显示paredPlaylists包含一个看起来像我期望的元素。在第二种情况下,它变成了一个承诺,然后给出了错误

paredPlaylists.push不是一个函数

我知道错误本身是由结果数组(paredPlaylists)解释的,它不再是一个数组,而是一个承诺。但是,它如何在第一个过程中成功地将简单对象{id:“foo”}推送到数组上,然后在第二个过程中转换为承诺呢

async function getPlaylists(token) {
    return await fetch('https://somewhere')
        .then((response) => response.json())
        .then(async (response) => {
            return await response.items.reduce(async (paredPlaylists, playlist) => {
                await paredPlaylists.push({
                    "id": "foo"
                })
            }, [])
        })
}
注意:我对React和JS还是一个新手,对承诺和强制异步只掌握了一部分。我希望我有很多不必要的等待。早期的尝试并没有这么多,我只是不断地反复尝试,希望能得到实际的对象来处理vs.promises。

使用数组并对每个项目运行回调。 如果使用数组数组,请考虑使用CONTAT < /P>
  return response.items.reduce( (a, b) => a.concat(b), [])

如果它只是一个数组,那么只需根据您的喜好映射您的项目

  return response.items.map(playlist => ({ id: playlist.id }) )

获取一个数组并为每个项运行回调。 如果使用数组数组,请考虑使用CONTAT < /P>
  return response.items.reduce( (a, b) => a.concat(b), [])

如果它只是一个数组,那么只需根据您的喜好映射您的项目

  return response.items.map(playlist => ({ id: playlist.id }) )


如果您只是通过将
fetch
结果缩减为
{“id”:“foo”}
来操作
fetch
结果,那么您可能不需要所有这些
异步/await
,而只需要第一个,返回(即使,
return await
没有多大意义)@CapitanFindus谢谢您。我仍然在思考JS的异步模型,其中大多数确实是无关的插件,因为它们试图修复对症状的错误解释。不客气。如果您想要对我的句子“return await没有多大意义”进行简单的解释,您可以只通过将
fetch
结果缩减为
{id:“foo”}
来操作它,可能您不需要所有这些
async/await
,而只需要第一个返回(即使,
return wait
没有多大意义)@CapitanFindus谢谢你。我仍然在思考JS的异步模型,其中大多数确实是无关的插件,它们都是基于试图修复对症状的错误解释。不客气。如果你想简单解释我的句子“return wait没有多大意义”谢谢!我在如何调用reduce的机制上做了更多的笔记,而不是结果和它们的用例。非常感谢。我仍然在使用concat获得原始问题(是的,它将添加一个本身包含数组的更复杂的对象)。累加器数组正在初始化为[],并且是一个对象的数组:[{id:“foo”}]在第一次迭代之后,但在下一次迭代中,它是未定义的。你能用一个例子更新你的问题吗?项目看起来是什么样的,并且对你试图实现的目标进行一点描述吗?谢谢!我对如何调用reduce的机制做了更多的笔记,而不是结果和它们的用例。非常感谢。我很高兴我仍然使用concat获得原始问题(是的,它将添加一个本身包含数组的更复杂的对象)。累加器数组将初始化为[],并且是一个对象的数组:[{id:“foo”}]在第一次迭代之后,但在下一次迭代中,它是未定义的。您是否可以用response.items的示例更新您的问题,并对您试图实现的目标进行更详细的描述?