Асинхронные вычисления в 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 и, следовательно, браузер.