首页 > 解决方案 > 如何引用json响应的多个孩子的孩子

问题描述

我目前正在尝试为我的应用获取我firebase-realtime-database使用的数据。目标是在我的应用程序中有多个卡片,它们的值分别为“纬度”、“经度”、“名称”、“价格”和一张图片。为了渲染卡片,我使用了地图功能。axiosreact-native

我写了一个google-cloud-functions从我的数据库中获取数据:

const admin = require('firebase-admin');

module.exports = function(req, res) {
  admin.database().ref('locations/').on('value', function(snapshot) {
    res.send(snapshot.val());
  }, err => res.send({ error: err }));
}

响应如下:

{
     "-LXd6BopD1onEMc--1qS": {
        "latitude": xxxx,
        "longitude": xxxx,
        "name": "xxxx",
        "price": "xxx",
        "url": "xxxxx"
    },
    "-LXd7GokGQqkxkhDXJBd": {
        "latitude": xxxx,
        "longitude": xxxx,
        "name": "xxxx",
        "price": "xxxx",
        "url": "xxxxxx"
    },
}

孩子的键/名称基本上是未知的,因为我使用“推送”将数据放入数据库,这会为每个条目创建唯一的键。

我目前正在使用它来访问数据,但不幸的是“数据”始终未定义。

let { data } = await axios.get(`${ROOT_URL}/getValues`)

所以我有两个问题:

  1. 为什么“数据”未定义,我该如何解决?

  2. 如果第一个问题得到解决,我如何从两个孩子那里获取数据,因为我没有明确知道他们的密钥。我如何引用它们?

谢谢您的帮助!

标签: firebasereact-nativefirebase-realtime-databasegoogle-cloud-functionsaxios

解决方案


1.-await axios.get('${ROOT_URL}/getValues') 此代码返回一个承诺,因此您仍然需要解决该承诺以从中获取数据

2.- 你得到数据后,你可以用 Object.keys 或 Object.entries 对其进行迭代。查看代码片段

希望这可以帮助

async function request(){
return  await axios.get('https://jsonplaceholder.typicode.com/posts/1');
}

async function makeRequest() {

const {data} = await request(); // this line resolves the promise
console.log(data);

}

makeRequest();


const dummyResponse = {
     "-LXd6BopD1onEMc--1qS": {
        "latitude": 'xxxx',
        "longitude": 'xxxx',
        "name": "xxxx",
        "price": "xxx",
        "url": "xxxxx"
    },
    "-LXd7GokGQqkxkhDXJBd": {
        "latitude": 'xxxx',
        "longitude": 'xxxx',
        "name": "xxxx",
        "price": "xxxx",
        "url": "xxxxxx"
    },
};

Object.keys(dummyResponse).forEach( key => {console.log(key)})
Object.entries(dummyResponse).forEach( entry => {console.log(entry)})
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>


推荐阅读