首页 > 解决方案 > 从 Firebase 读取

问题描述

我对 Firebase 和 JS 本身也很陌生,这不是最容易理解的事情。

因此,我有一个 Firebase 实时数据库,其中包含虚拟“用户”配置文件,每个配置文件都包含不同的属性。 数据库条目的图片,示例

我正在尝试调用用户的属性。我设法通过以下方法实现了它:

let installDateRef = database.ref(`users/${userAccount}/installationDate`);
let lastUsedDateRef = database.ref(`users/${userAccount}/lastUsed`);
 installDateRef.on('value', function(snapshot) {
        installationDate.innerText = (snapshot.val());
    }, function (error) {
        installationDate.innerText = `Error: ${error.code}`
    });

    lastUsedDateRef.on('value', function(snapshot) {
        lastUsedDate.innerText = (snapshot.val());
    }, function (error) {
        lastUsedDate.innerText = `Error: ${error.code}`
    });

但是在我的应用程序中,我想显示所有用户信息,所以复制这个“.on”函数似乎有点过头了。有人说下面有这样更干净的方法

const firebasePromises = [
database.ref(`users/${userAccount}/installationDate`),
database.ref(`users/${userAccount}/lastUsed`)
];
Promise.all(firebasePromises).then(([_installationDate, _lastUsed]) => {
installationDate.innerText = (_installationDate.val());
lastUsedDate.innerText = (_lastUsed.val());
})

但我对上帝诚实不能让它发挥作用。它要么返回未定义,要么返回我的承诺 const 数组。.val() 甚至根本不起作用,说这不是一个函数。

任何关于最佳和工作实践的帮助都将非常感激。

谢谢

标签: javascriptfirebasefirebase-realtime-databasecallback

解决方案


@Doug Stevenson 谢谢!这正是所需要的:

const firebasePromises = [
        database.ref(`users/${userAccount}/installationDate`).once('value'),
        database.ref(`users/${userAccount}/lastUsed`).once('value'),
        ];

        Promise.all(firebasePromises).then(snap => {
            installationDateHTML.innerText = snap[0].val();
            lastUsedDateHTML.innerText     = snap[1].val();

        })

推荐阅读