Асинхронные вычисления в scalajs Diode

У меня есть пользовательский интерфейс и я предоставляю пользователю кнопку, которая выполняет функцию longComputation(x: A): A и затем обновляет пользовательский интерфейс (в частности, модель) с новым результатом. Эта функция может занять больше времени для вычисления результата и, следовательно, должна вычисляться параллельно.

Диод дает мне Effect, PotAction, а также AsyncAction, Я прочитал документацию по Effects и PotActions / AsyncActions, но даже не могу заставить работать простой пример.

Может кто-нибудь указать мне или привести простой рабочий пример?

Я создал ScalaFiddle на основе SimpleCounter пример. E сть LongComputation кнопка, которая должна работать параллельно; но нет.

2 ответа

В JavaScript вы не можете запускать вещи параллельно без использования Web Workers, потому что механизм JS является однопоточным. Веб-работники больше похожи на отдельные процессы, чем на потоки, так как они не разделяют память, и вам нужно отправлять сообщения для связи между работниками и основным потоком.

У меня менее 50 репутаций для комментариев, поэтому я должен создать новый ответ вместо того, чтобы комментировать ответ @ochrons:

Как уже упоминалось, веб-работники общаются через передачу сообщений и не делятся ни одним государством. Эта концепция чем-то похожа на Akka - даже существует Akka.js, который позволяет вам использовать системы акторов в ScalaJS и, следовательно, браузер.

Другие вопросы по тегам