Получение неопределенного значения в Firebase Nodejs

Это невозможно. Хэш-код для String является с потерями; многие значения String приведут к тому же хэш-коду. Целое число имеет 32 битовые позиции, и каждая позиция имеет два значения. Невозможно сопоставить даже 32-символьные строки (например) (каждый символ имеет множество возможностей) в 32 бита без коллизий. Они просто не подходят.

Если вы хотите использовать арифметику произвольной точности (скажем, BigInteger), тогда вы можете просто взять каждый символ как целое число и объединить их все вместе. Вуаля.

0
задан Manik 18 January 2019 в 15:19
поделиться

1 ответ

Каждый раз, когда вы вызываете setValue() или updateChildren() в качестве ссылки, это приводит к записи данных в базу данных. Это означает, что в вашем коде новый узел для нового пользователя создается после следующих операторов:

final DatabaseReference newPost3 = mDatabase3.push();

newPost3.child("userid").setValue(acct.getEmail());

Таким образом, в этот момент база данных содержит только userid для нового узла. Поскольку узел теперь создан, ваша облачная функция сработает, и на этом этапе username и score будут неопределенными.

Чтобы этого не происходило, вам нужно записать весь узел для нового пользователя за один вызов в базу данных. Простой способ сделать это - поместить все данные в HashMap:

Map<String, Object> values = new HashMap<String, Object>();

values.put("userid", acct.getEmail());
values.put("desc", finalValue);
values.put("username", acct.getDisplayName());

mDatabase3.push().setValue(values);
0
ответ дан Frank van Puffelen 18 January 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: