私が次のコードに期待したのは、タイマーのオンとオフを切り替えると非同期にカウントを増加させることです。しかし、常に同期して動作します(2刻み)。すぐにElmでタイマーを開始
どのように非同期にすることができますか?
EDIT:私の英語能力が不足している可能性がありますが、問題はよく誤解されているようです。私は私の答えとまったく同じ振る舞いをする実装をしたい。そしてポイントは、です.2つのタイマーは、トグルすることによってカウントを別々に増やすべきです。
import Html exposing (program, div, button, text)
import Html.Events exposing (onClick)
import Time exposing (every, second)
main = program
{ init = ({cnt = 0, on = True}, Cmd.none)
, view = view
, update = update
, subscriptions = subscriptions
}
subscriptions model = Sub.batch
[ every second (always Increment)
, if model.on then every second (always Increment) else Sub.none
]
view model = div []
[ button [ onClick Toggle ] [ text "-" ]
, div [] [ text (toString model) ]
, button [ onClick Increment ] [ text "+" ]
]
type Msg = Increment | Toggle
update msg model =
case msg of
Increment ->
({model | cnt = model.cnt + 1}, Cmd.none)
Toggle ->
({model | on = not model.on}, Cmd.none)
ずつ増加できます、1 2:あなたは出力が可能に表示期待、3、4のいずれかである。 model.onは、トグルが実際に起こったときに基づいて、ディスプレイが変化する速度にのみ影響する必要があります。 しかし、問題は、model.onがTrueの場合、1,3,5と表示されます。1,2,3,4,5の代わりに、以前とは異なる速度で表示されます。 私はあなたの質問を正しく理解しているかどうか教えてください。 – Jigar
@ Jigarはい。それが私の言いたいことです。 – jeiea