Запросы FaunaDB не дают последних результатов в многопользовательском сценарии - PullRequest
0 голосов
/ 12 апреля 2020

Context

Я изучаю FaunaDB с помощью React и написал немного кода, используя эту статью в качестве ссылки. Демонстрационное приложение, которое я создаю, - это приложение для опроса / подсчета количества кофе. Пользователю будут показаны типы кофе, и вы нажмете кнопку, чтобы увеличить счетчик. На данный момент есть только две кнопки / варианты кофе.

Проблема

Для одного пользователя приложение работает нормально, но когда я открываю две windows приложения, оно не похоже, не ведет себя должным образом. Ниже показано:

Окно 1

Страница загружается со значениями из фауны (скажем, mocha = 1, long black = 1). Я нажимаю на mocha, и приложение должно получить последние значения от Фауны (на тот случай, если кто-то еще сделал какие-либо обновления), затем увеличивает мокко и публикует обновление для Фауны (теперь mocha = 2, long black = 1). Я подтвердил, что эти значения хранятся в FaunaDB.

Окно 2

Страница загружена со значениями из Fauna (скажем, mocha = 1, long black = 1) - Окно 1 и 2 был загружен в то же время. Теперь в окне 2 я нажимаю длинную черную кнопку. Однако, когда приложение получает значения, оно получает mocha = 1, long black = 1. Затем он увеличивает длинную черную и публикует обновление для фауны (теперь mocha = 1, длинная черная = 2), поэтому сбрасывает то, что пользователь сделал в окне 1. Он должен был получить mocha = 2 вместо mocha = 1.

Я уже давно занимаюсь этой проблемой и буду очень признателен за направление.

Фрагменты кода

Фрагмент из API: https://gist.github.com/ClydeDz/76030075aebbd4673a45bdac13de7979
Фрагмент из сервиса: https://gist.github.com/ClydeDz/eac99e33aa2c2d8da58b26f00e6478e0
Фрагмент из компонента: https://gist.github.com/ClydeDz/bbc26605b039892c62245f02a7b7a631

Возможно ли getAllChoices ' s .then фактически не запрашивает фауну, а просто возвращает то, что находится в состоянии React? Как мне подтвердить и исправить это?

1 Ответ

0 голосов
/ 12 апреля 2020

Вы не получаете правильные результаты, потому что вы не выполняете запросы транзакционно, возьмите, например, вашу функцию getAllChoices, сначала вы разбиваете на страницы, затем результат возвращается к javascript, затем вы отображаете результат на после операции get вы отправляете второй запрос. Ваша updateChoice функция делает то же самое, вы getAllChoices и updateChoice в отдельной транзакции, есть вероятность, что после того, как вы получите и перед обновлением кто-то другой обновил ее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...