首页 > 解决方案 > Firebase 动态查询取决于数组中的数据

问题描述

这是我的动态数组

let arr = [1,3];

我想根据数组的长度进行查询次数

Firebase.database().ref(`test/${arr[0]}`).once('value', (snapshot) => {
    let arr = [];
    snapshot.forEach(() => {
      arr.push({
         name: snapshot.val().name
      });
    });
    this.setState({ data: arr });
}).catch((error) => console.error(error));

现在我通过对数组索引进行硬编码来进行查询!有什么方法可以使查询动态化

数据库结构

{
    "test" : {
        "1" : {
            "name" : "One",
        },
        "2" : {
            "name" : "Two",
        },
        "3": {
            "name" : "Three",
        }
    }
}

期望的输出

仅来自 1 和 3 的名称

标签: firebasereact-nativefirebase-realtime-database

解决方案


尝试如下:

let arr = [1, 3];
arr.forEach((item) => {
    Firebase.database().ref(`test/${item}`).once('value', (snapshot) => {
        let arr = [];
        snapshot.forEach(() => {
          arr.push({
             name: snapshot.val().name
          });
        });
        this.setState({ data: arr });
    }).catch((error) => console.error(error));
});

或者,如果您想setState在一个数组中包含所有数据后加载调用:

(async () => {
    let items = [1, 3];
    let arr = [];

    for (let item of items) {
        try {
            const snapshot = await Firebase.database().ref(`test/${item}`).once('value');
            snapshot.forEach(() => {
                arr.push({
                    name: snapshot.val().name
                });
            });
        } catch (error) {
            console.error(error);
        }
    }

    this.setState({data: arr});
})();

推荐阅读