Próbuję użyć metody Firebase .on() w celu sprawdzenia, czy w mojej bazie danych Firebase w czasie rzeczywistym zostało utworzone nowe konto. Teraz, odkąd szyfruję te dane w bazie danych Firebase, chciałbym po raz pierwszy wczytać dane z bazy Firebase, aby odszyfrować je za pomocą utworzonej przeze mnie funkcji. Czy to możliwe, że mógłbym złożyć coś w rodzaju obietnicy, która pozwoli mi to zrobić, gdy Firebase załaduje wszystkie dane w mojej zmiennej?

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

Chciałbym dodać coś takiego:

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

Ważną rzeczą, którą chcę zachować, jest funkcja .on(), ponieważ dzięki niej będę mógł stale sprawdzać, czy ktoś utworzył nowe konto w bazie danych. Czy ktoś ma jakieś pomysły, jakie inne podejście mógłbym zastosować, aby osiągnąć to samo?

0
Makisa9999 26 styczeń 2022, 21:07
decryptAccounts() powinien działać za każdym razem, gdy on() uruchamia się i zwraca nowe aktualizacje, prawda? czy tylko raz?
 – 
Dharmaraj
26 styczeń 2022, 21:17
Tak decryptAccounts() powinno być uruchamiane za każdym razem, abym mógł również odszyfrować nowe konta.
 – 
Makisa9999
26 styczeń 2022, 21:34

3 odpowiedzi

Najlepsza odpowiedź

Możesz po prostu dodać funkcje decryptAccounts() do on(), aby za każdym razem, gdy otrzymasz aktualizację, możesz uruchomić tę funkcję na tych danych.

var users2 = database.ref("users/").on("value", (snapshot) => {
      const usersLst = snapshot.val();
      
      // runs on new value fetched after every update
      decryptAccounts(usersLst)
})
0
Dharmaraj 26 styczeń 2022, 21:40
Problem, na który natrafię, jeśli użyję twojego rozwiązania, polega na tym, że jeśli nastąpi aktualizacja bazy danych po pierwszym odszyfrowaniu, program odszyfruje informacje, które zostały już odszyfrowane, więc po prostu zastąpi adres e-mail i hasło pustym strunowy. Czy możesz wymyślić jakieś rozwiązanie tego problemu?
 – 
Makisa9999
26 styczeń 2022, 21:57

Możesz przechowywać ref w zmiennej, aby użyć go ponownie, tak jak sugeruje dokumentacja.

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
});

To najpierw pobiera wartości raz, a następnie można je odszyfrować, gdy wartości się zmienią, funkcja .on zostanie ponownie uruchomiona.

0
Casper Kuethe 26 styczeń 2022, 21:21

Odpowiedź, którą znalazłem z pomocą Dharmaraja, była taka, że ​​możesz po prostu to zrobić:

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

To za każdym razem pobiera wartości z bazy danych i odszyfrowuje je.

0
Makisa9999 26 styczeń 2022, 23:23