Elmish 寓言中的异步命令
Async Command in fable Elmish
我有这段代码,我正在 运行 使用 Fable Elmish 和 Fable 远程连接到 Suave 服务器。我知道服务器因为邮递员而工作,并且此代码的变体确实调用了服务器
let AuthUser model : Cmd<LogInMsg> =
let callServer = async {
let! result = server.RequestLogIn model.Credentials
return result
}
let result = callServer |> Async.RunSynchronously
match result with
| LogInFailed x -> Cmd.ofMsg (LogInMsg.LogInRejected x)
| UserLoggedIn x -> Cmd.ofMsg (LogInMsg.LogInSuccess x)
let 结果中的 callServer
行失败并显示 Object(...) is not a function
,但我不明白为什么。任何帮助将不胜感激。
根据寓言文档 Async.RunSynchronously
不受支持,但我不确定这是否会导致您的问题。无论如何,你应该构建你的代码,这样你就不需要阻止异步计算。在 Elmish 的情况下,您可以使用 Cmd.ofAsync
从异步中创建一个命令,该命令在异步完成时分派异步返回的消息。
let AuthUser model : Cmd<LogInMsg> =
let ofSuccess result =
match result with
| LogInFailed x -> LogInMsg.LogInRejected x
| UserLoggedIn x -> LogInMsg.LogInSuccess x
let ofError exn = (* Message representing failed HTTP request *)
Cmd.ofAsync server.RequestLogIn model.Credentials ofSuccess ofError
希望这对您有所帮助。
我有这段代码,我正在 运行 使用 Fable Elmish 和 Fable 远程连接到 Suave 服务器。我知道服务器因为邮递员而工作,并且此代码的变体确实调用了服务器
let AuthUser model : Cmd<LogInMsg> =
let callServer = async {
let! result = server.RequestLogIn model.Credentials
return result
}
let result = callServer |> Async.RunSynchronously
match result with
| LogInFailed x -> Cmd.ofMsg (LogInMsg.LogInRejected x)
| UserLoggedIn x -> Cmd.ofMsg (LogInMsg.LogInSuccess x)
let 结果中的 callServer
行失败并显示 Object(...) is not a function
,但我不明白为什么。任何帮助将不胜感激。
根据寓言文档 Async.RunSynchronously
不受支持,但我不确定这是否会导致您的问题。无论如何,你应该构建你的代码,这样你就不需要阻止异步计算。在 Elmish 的情况下,您可以使用 Cmd.ofAsync
从异步中创建一个命令,该命令在异步完成时分派异步返回的消息。
let AuthUser model : Cmd<LogInMsg> =
let ofSuccess result =
match result with
| LogInFailed x -> LogInMsg.LogInRejected x
| UserLoggedIn x -> LogInMsg.LogInSuccess x
let ofError exn = (* Message representing failed HTTP request *)
Cmd.ofAsync server.RequestLogIn model.Credentials ofSuccess ofError
希望这对您有所帮助。