如何从(任务字符串值)中获取值?
how to get the value from (Task String Value)?
我正在尝试使用以下代码从本地存储加载 json:
let
val = Storage.getItem "exercises" decodeExerciseList
in
({ model | exercises = val }, Cmd.none)
但我收到此错误:
这个 case
的第 5 和第 6 个分支产生不同类型的值。 - 第 5 个分支具有此类型:
( Model, Cmd Msg )
但是第 6 个是:
( { exercise : Maybe Model.Exercise
, exercises : Task String (List Model.Exercise)
}
, Cmd msg
)
我认为这可能会有所帮助:
case val of
succeed -> ({ model | exercises = val }, Cmd.none)
fail -> ({model | exercises = []}, Cmd.none)
但运气不好。在这种情况下,我得到了另一个错误:
这个 case
的第一个和第二个分支产生不同类型的值。 - 第一个分支有这种类型:
( { ..., exercises : Task String (List Model.Exercise) }, Cmd msg )
但是第二个是:
( { ..., exercises : List a }, Cmd msg )
所以基本上我仍然对任务字符串 X 而不仅仅是 X 有问题。
知道这里要做什么吗?
虽然本地存储在 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
我正在尝试使用以下代码从本地存储加载 json:
let
val = Storage.getItem "exercises" decodeExerciseList
in
({ model | exercises = val }, Cmd.none)
但我收到此错误:
这个 case
的第 5 和第 6 个分支产生不同类型的值。 - 第 5 个分支具有此类型:
( Model, Cmd Msg )
但是第 6 个是:
( { exercise : Maybe Model.Exercise
, exercises : Task String (List Model.Exercise)
}
, Cmd msg
)
我认为这可能会有所帮助:
case val of
succeed -> ({ model | exercises = val }, Cmd.none)
fail -> ({model | exercises = []}, Cmd.none)
但运气不好。在这种情况下,我得到了另一个错误:
这个 case
的第一个和第二个分支产生不同类型的值。 - 第一个分支有这种类型:
( { ..., exercises : Task String (List Model.Exercise) }, Cmd msg )
但是第二个是:
( { ..., exercises : List a }, Cmd msg )
所以基本上我仍然对任务字符串 X 而不仅仅是 X 有问题。
知道这里要做什么吗?
虽然本地存储在 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