Я пишу веб-игру в Elm с большим количеством событий, зависящих от времени, и я ищу способ запланировать событие с определенной задержкой времени.
В JavaScript я использовал setTimeout(f, timeout)
, который явно работал очень хорошо, но - по разным причинам - я хочу избежать кода JavaScript и использовать только Elm.
Я знаю, что я могу subscribe
до Tick
на определенном интервале и получать тики часов, но это не то, что я хочу - у моих задержек нет разумного общего знаменателя (например, две задержки - 30 мс и 500 мс), и я хочу избежать необходимости обрабатывать много ненужных тиков.
Я также наткнулся на Task
и Process
- кажется, что, используя их, я как-то умею, что хочу с помощью Task.perform failHandler successHandler (Process.sleep Time.second)
.
Это работает, но не очень интуитивно - мои обработчики просто игнорируют все возможные входные данные и отправляют одно и то же сообщение. Более того, я не ожидаю, что тайм-аут когда-нибудь потерпит неудачу, поэтому создание обработчика сбоев похоже на питание библиотеки, чего я не ожидал от такого элегантного языка.
Есть ли что-то вроде Task.delayMessage time message
, которое будет делать именно то, что мне нужно (отправьте мне копию своего аргумента сообщения после указанного времени), или мне нужно сделать для этого свою собственную оболочку?