你如何用 firebase .on() 函数做出承诺?

How do you make a promise with firebase .on() function?

我正在尝试使用 Firebase .on() 方法来检查何时在我的实时 Firebase 数据库中创建了新帐户。现在,因为我在 Firebase 数据库中加密了这些数据,所以我想在第一次加载来自 firebase 的数据时使用我创建的函数对其进行解密。我有没有可能做出类似承诺的事情,一旦 firebase 将所有数据加载到我的变量中,我就可以这样做?

var users2 = database.ref("users/").on("value", (snapshot) => {
      const usersLst = snapshot.val();
      users = usersLst
});

我想补充一点:

var users2 = database.ref("users/").on("value", (snapshot) => {
      const usersLst = snapshot.val();
      users = usersLst
}).then(() => {
      console.log(decryptAccounts(users))
});

我想保留的一件重要事情是 .on() 函数,因为它可以让我不断检查是否有人在数据库中创建了新帐户。有谁知道我可以用来实现同样目标的另一种方法是什么?

您可以将 ref 存储在一个变量中,以便像文档建议的那样重用它。

const databaseRef = database.ref("users/");
// use databaseRef.get() with the correct path to your attribute you want to get
// Runs only once
databaseRef.get().then((snapshot) => {
  // Decrypt function
});
// Listens to changes
var users2 = databaseRef .on("value", (snapshot) => {
      const usersLst = snapshot.val();
      users = usersLst
});

这首先获取值一次,然后你可以解密它们,当值改变时,.on 函数将再次被触发。

您只需在 on() 中添加 decryptAccounts() 函数,这样每次收到更新时,您都可以 运行 该函数处理该数据。

var users2 = database.ref("users/").on("value", (snapshot) => {
      const usersLst = snapshot.val();
      
      // runs on new value fetched after every update
      decryptAccounts(usersLst)
})

我在 Dharmaraj 的帮助下找到的答案是你可以这样做:

database.ref("users/").on("value", (snapshot) => {
    decryptAccounts(snapshot.val());
});

这将每次从数据库中获取值并解密它们。