
Max
13.10.2017
10:57:23
во
я поясню мысль совы
во фронте у тебя во время выполнения какой-то реакции на действие юзера
например фетч данных

Google

Max
13.10.2017
10:58:02
у тебя может еще что-то прилететь
на беке у тебя реквест единажды прилетает
ты конечно можешь его обработать как угодно с параллелизмом, асинком и прочим

Алексей
13.10.2017
10:58:29
на бэке же тоже самое
один реквест не завершился
уже другой прилетает

Max
13.10.2017
10:58:50
а у тебя тред другой

Алексей
13.10.2017
10:58:58
нет не другой
тред один
нода же

Max
13.10.2017
10:59:10
ну процесс другой
какая разница )

Алексей
13.10.2017
10:59:13
другая корутина фактически

Google

Алексей
13.10.2017
10:59:18
процесс тоже один
запущенных async функций куча

Max
13.10.2017
10:59:45
ну им то похуй на то что в фоне работает?

Алексей
13.10.2017
10:59:52
нет

Max
13.10.2017
10:59:56
давай пример

Evgeniy
13.10.2017
10:59:58
Попахивает бессмысленным холиваром.

Алексей
13.10.2017
11:00:08
потому что они иногда работают с теми же данными, что и соседние корутины

Max
13.10.2017
11:00:16
роу-левел-лок
?
если это критично

Сергей
13.10.2017
11:00:28
на бэке же тоже самое
Представь у тебя есть let a = {}
Тебе прилетел один запрос который его меняет после получения данных
И пока первый ждет данные, прилетает второй который сразу же его меняет.
Прилетает ответ от запроса на первый, у него два варианта:
Опираться на старые данные, но тогда он перетрет новые данные
Или же опираться на новые данные, но тогда придется заново делать запрос так как предыдущие данные не актуальны

Алексей
13.10.2017
11:01:19
давай пример
Один клиент добавляет запись, другой читает все записи. Эти действия могут происходить одновременно, а могут и не происходить.

Max
13.10.2017
11:01:30
транзакции
на фронте это руками решать приходится

Алексей
13.10.2017
11:01:43

Сергей
13.10.2017
11:03:55

Enjoy the
13.10.2017
11:05:41
А чат по скале есть?

Artem
13.10.2017
11:05:58
есть

Enjoy the
13.10.2017
11:06:05
Нашел

Google

Enjoy the
13.10.2017
11:06:07
Пасиба

Алексей
13.10.2017
11:07:06

Сергей
13.10.2017
11:07:17
Есть объект
Не зацикливайся

Алексей
13.10.2017
11:08:11
Есть стейт, который отличается от базы тем, что полностью висит в памяти, доступен весь сразу, и две корутины обращающиеся к одному стейту не могут получить неконсистентное состояние.

Сергей
13.10.2017
11:08:45
Ты о чем вообще
Я тебе дал пример
Ты ушел вообще в дебри
Реши ситуацию которую я описал

Алексей
13.10.2017
11:09:15
На бэке две корутины (или два потока к примеру) могут получить одну и ту же запись из базы данных в немного разное время и фактически получить разные данные.

Сергей
13.10.2017
11:09:33
Нет базы данных
Че ты гонишь
Объект
Обычный жс объект

Max
13.10.2017
11:09:56
тебе консистентность в какой момент нужна?

Сергей
13.10.2017
11:10:15
Представь у тебя есть let a = {}
Тебе прилетел один запрос который его меняет после получения данных
И пока первый ждет данные, прилетает второй который сразу же его меняет.
Прилетает ответ от запроса на первый, у него два варианта:
Опираться на старые данные, но тогда он перетрет новые данные
Или же опираться на новые данные, но тогда придется заново делать запрос так как предыдущие данные не актуальны
Только это

Google

Admin
ERROR: S client not available

Сергей
13.10.2017
11:10:34
И два хэндлера на экспрессе
Не выдумывай лишнего
Реши задачу
Или что без корутин и базы никак?
Именно поэтому ридакс, фп и иммутабельность

Алексей
13.10.2017
11:14:24
Что значит "решить задачу"? Где в этой задачи вопрос? Где знак вопроса? Если я правильно понимаю, то я бы посылал самые свежие данные из объекта a

Сергей
13.10.2017
11:14:42

Алексей
13.10.2017
11:16:12
Можно отправить ещё один запрос на получение самых свежих данных, но опять же нет гарантий, что объект опять не изменится в этот момент. И мутабельность/иммутабельность тут не поможет.

Сергей
13.10.2017
11:17:59

Алексей
13.10.2017
11:18:21
last write wins
вполне рабочая стратегия для таких случаев

Сергей
13.10.2017
11:19:11
Терять данные нельзя

Andrey
13.10.2017
11:19:38

Алексей
13.10.2017
11:20:12
Ааа, так вы хотите что-то наподобие CRDT
ну это знаете ли довольно интересная задача, явно выходит за рамки обычного фронтенда/бэкенда

Google

Сергей
13.10.2017
11:22:07
на фронте
вот каждый раз когда делаешь запрос к бэку
кто-то даже подсчитывает количество запросов к определенной ручке

Алексей
13.10.2017
11:22:56
Самое простое решение: last write wins

Cenator
13.10.2017
11:23:01

Алексей
13.10.2017
11:23:19
И в большинстве случаев самое правильное

Сергей
13.10.2017
11:24:00

Vladyslav
13.10.2017
11:25:57
а откуда святая уверенность что фп прям жизненно-важен ? чот дичь прям совсем.