5

我有这段代码,我正在使用 Fable Elmish 和 Fable remoting 连接到 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,但我不明白为什么。任何帮助,将不胜感激。

4

1 回答 1

10

根据 Fable docsAsync.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

希望这会有所帮助。

于 2018-04-18T13:07:58.310 回答