为了账号安全,请及时绑定邮箱和手机立即绑定

通过对象和数组的数组反应映射

通过对象和数组的数组反应映射

湖上湖 2021-11-18 15:59:29
我有以下几点:const [channelAndReadsArray, setChannelAndReadsArray] = useState()var channelAndReads = []const requests = channels.map((currentChannel) => {    axios.get(serverRestAddress...                        .then((result) => {        var element = {}        element.channel = currentChannel;        element.reads = result;        channelAndReads.push(element);    })                    })Promise.all(requests).then(() => {    setChannelAndReadsArray(channelAndReads)});            ...if (!channelAndReadsArray) {    return null})channelAndReadsArray.map((channelAndReads) => {    console.log(channelAndReads)})这在控制台日志中给了我空值。我不确定这里有什么问题
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

为了Promise.all()工作,你需要从channels.map. 您可以返回每个元素,然后使用列表Promise.all来存储它们。


示例(未测试):


const [channelAndReadsArray, setChannelAndReadsArray] = useState()


const requests = channels.map((currentChannel) =>

  axios.get(serverRestAddress)

  .then((result) => ({

    channel: currentChannel,

    reads: result

  }))

)


Promise.all(requests).then((elements) => {

  setChannelAndReadsArray(elements)

});


if (!channelAndReadsArray) {

  return null

})



channelAndReadsArray.map(console.log)


查看完整回答
反对 回复 2021-11-18
?
万千封印

TA贡献1891条经验 获得超3个赞

该request数组将是空的,因为您没有从 .map 返回任何内容,一种更简洁的方法可能是不使用异步代码推送到数组中


const [channelAndReadsArray, setChannelAndReadsArray] = useState();

const requests = channels.map(async (currentChannel) => {

           return axios.get(serverRestAddress...)

           .then((result) => {

                var element = {}

                element.channel= currentChannel;

                element.reads= result;

                return result;

             })

           });

Promise.all(requests).then((results) => { setChannelAndReadsArray(results)});


if (!channelAndReadsArray) {

     return null

});

channelAndReadsArray.map((channelAndReads)=>{

     console.log(channelAndReads)

});


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信