寓言中的异步命令Elmish

use*_*179 3 f# fable-f# 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)
Run Code Online (Sandbox Code Playgroud)

callServerlet结果中的行失败了Object(...) is not a function,但我不明白为什么.任何帮助,将不胜感激.

hve*_*ter 8

根据Fable文档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
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.