我正在尝试使用以下代码从localstorage加载json:
let
val = Storage.getItem "exercises" decodeExerciseList
in
({ model | exercises = val }, Cmd.none)
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:第5和第6个分支case产生了不同类型的值. - 第5分支有这种类型:
( Model, Cmd Msg )
Run Code Online (Sandbox Code Playgroud)
但第六是:
( { exercise : Maybe Model.Exercise
, exercises : Task String (List Model.Exercise)
}
, Cmd msg
)
Run Code Online (Sandbox Code Playgroud)
我想也许这可能会有所帮助:
case val of
succeed -> ({ model | exercises = val }, Cmd.none)
fail -> ({model | exercises = []}, Cmd.none)
Run Code Online (Sandbox Code Playgroud)
但没有运气.在这种情况下,我得到了另一个错误:
第一和第二分支case产生不同类型的值. - 第一个分支有这种类型:
( { ..., exercises : Task String (List Model.Exercise) }, Cmd msg )
Run Code Online (Sandbox Code Playgroud)
但第二是:
( { ..., exercises : List a }, Cmd msg )
Run Code Online (Sandbox Code Playgroud)
所以基本上我仍然遇到任务字符串X而不是X的问题.
什么在这做什么的想法?
尽管localstorage是在javascript中同步访问的,但是这样的访问仍然不纯,因此在Elm中使用您已经看到的任务来处理.
所以你的代码需要分两个阶段 - 启动任务 - 使用返回的结果
像下面这样的东西
type Msg
= LoadFromStorage
| OnLocalStorage (Result String (List Model.Exercise))
update message model =
case message of
LoadLocalStorage ->
( model
, Storage.getItem "exercises" decodeExerciseList
|> Task.attempt OnLocalStorage
)
OnLocalStorage res ->
case res of
Ok val ->
({ model | exercises = val }, Cmd.none)
Err err ->
handle error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |