- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个客户端 Fable.Remoting 示例,用于打印异步函数的结果。
// Client code (Compiled to Javascript using Fable)
// ============
open Fable.Remoting.Client
let server = Proxy.create<IServer>
async {
let! length = server.getLength “hello”
do printfn “%d” length // 5
}
|> Async.StartImmediate
length
值(value)?
最佳答案
我看到你用 elmish 标记了你的问题,所以我假设你有一个 Msg
类型定义。不要使用 Async.StartImmediate
或 Async.RunSynchronously
;在 Elmish 中,你应该使用 Cmd.OfAsync
安排在异步块返回值后调度消息。 Cmd.OfAsync
中有四个功能(同样的四个也出现在 Cmd.OfPromise
中):either
, perform
, attempt
, 和 result
.我会为你分解它们,因为他们的文档还不够完善:
either
: 需要四个参数,task
, arg
, ofSuccess
, 和 ofError
. task
是您要调用的异步函数(类型为 'a -> Async<'b>
)。 arg
是类型 'a
的参数您想传递给 task
功能。 ofSuccess
是 'b -> 'Msg
类型的函数:它将接收异步函数的结果,并应该创建一条消息,大概是包含 'b
的消息。结果。最后,ofError
是 exn -> 'Msg
类型的函数: 如果 task
函数抛出异常,然后 ofError
将被调用而不是 ofSuccess
,并且应该将该异常转换为您的代码可以处理的 Elmish 消息(大概是一个将错误记录到 Javascript 控制台或弹出带有 Thoth.Toast 或类似内容的通知的消息)。 perform
: 喜欢 either
但没有 ofError
范围。如果您的异步命令不会失败(远程 API 调用永远不会出现这种情况,因为网络总是有可能出现故障或您的服务器没有响应),或者如果您只是不关心异常并且不介意,请使用此选项抛出未处理的异常。 attempt
: 喜欢 either
但没有 ofSuccess
参数,所以 task
如果成功,函数的结果将被忽略。 result
: 这个完全不一样。它只需要一个 Async<'Msg>
类型的参数,即您传递给它 async
已经将产生消息的块。 Cmd.OfAsync.result
如果您想对代码进行最少的更改,但我建议您使用
Cmd.OfAsync.perform
取而代之(并在编写了一些错误处理代码后将其升级到
Cmd.OfAsync.either
)。我将向您展示两种方式:
type Msg =
// ... rest of your messages go here
| GetLength of string
| LengthResult of int
let update msg model =
match msg with
// ... rest of your update function
| GetLength s ->
let usePerform = true
if usePerform then
model, Cmd.OfAsync.perform server.getLength s LengthResult
else
let length : Async<Msg> = async {
let! length = server.getLength s
return (LengthResult length)
}
model, Cmd.OfAsync.result length
| LengthResult len ->
// Do whatever you needed to do with the API result
printfn "Length was %d" len
model, Cmd.none
either
(一旦你进入生产,你真的应该这样做),会有第三条消息
LogError of exn
这将被处理为:
| LogError e ->
printfn "Error: %s" e.Message
model, Cmd.none
Cmd.OfAsync.perform
上面代码中的行将变为:
model, Cmd.OfAsync.either server.getLength s LengthResult LogError
关于f# - 从 Fable.Remoting 返回异步值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619894/
紧随my previous question我在“Elm in Action”(并尝试移植到 Fable-Elmish)中处理的示例具有来自自定义元素的自定义事件。在 html 文件中,我有以下内容:
我有一个安全堆栈应用程序。我需要使用户能够上传和下载文件。 通过使用上传作品 Browser.Dom.FileReader.Create() 有没有相应的方式让用户下载文件? This answer提
我正在使用 SAFE 堆栈的 Elmish.Bridge 风格。 在 View 的顶层,我创建一个如下输入字段: Input.input [ Input.Value(model.FieldValue)
我已经使用 dotnet new SAFE 命令设置了一个标准 SAFE 应用程序,生成了两个服务器和客户端项目(以及共享文件夹)。 Client 项目具有包含 View 函数和引导代码的 Clien
我尝试使用 2 个参数调用 Redux.createStore,以下代码简化了签名,但我无法让 FSharp 理解我想要的内容: [] module redux = let createSto
我可以将字符串保存到本地浏览器存储 Browser.localStorage.setItem(key, str) 但是当我尝试对一个受歧视的联合进行字符串化时(例如,通过在其上调用 string),它
我想使用 Fable.JsonConverter。 我的测试代码(几乎复制 this)FableJson.fs在下面, module FableJson open Newtonsoft.Json //
我看过 simple ways使用 HTML5 File API 从 JavaScript 中输入的文件中读取内容。 这是我的 view 方法,在一个小型 fable-arch 应用程序中: let
我是 F# 和 Fable 的新手,我正在尝试从 Fable 的编译代码创建一个 Mongodb 集合。 如何在 F# 中表达此代码以使用 Fable 进行编译? var MongoClient =
这是一个客户端 Fable.Remoting 示例,用于打印异步函数的结果。 // Client code (Compiled to Javascript using Fable) /
我在 Fable REPL 中写了下面的代码: open Fable.Core let inline sqr x = x * x // Filters out `points` that are mo
我想将文件上传到我的 Fable-Elmish, end 以便我可以将其发送到服务器进行处理。但是,我找不到任何文档/示例来涵盖这一点。这是我的更新功能: let update msg model :
我正在尝试使用 F# 开发一个 chrome 扩展,发现在 https://fsharp.org/use/web-apps/ 中有一些框架:fable、websharper、borelo 和 SAFE
我需要使用带有 elmish 调度的 Fable-React 有状态组件。我不知道如何创建它。 我正在使用这个项目模板:https://github.com/fable-elmish/template
我正在尝试使用 Fable 编写一个简单的 React 组件。它应该显示一个带有 + 的简单计数器和 -纽扣。也需要留言string通过 Prop 。 出乎意料的是代码可以编译,但会引发运行时错误:
我想在下拉列表中有一个不是 optional 之一的默认值(不是:DefaultValue“2”)。它应该类似于以下内容,但不适用于输入字段。 Input.Placeholder "Your name
我想预测在服务时间内进入商店的顾客数量。我有每小时的数据 周一至周五 8:00 至 18:00 因此,我认为我的时间序列实际上是有规律的,但在某种意义上是非典型的,因为我每天 10 小时和每周 5 天
我正在尝试使用 NPM 包 normalize-wheel在一个寓言项目中。 我已经确认包已经下载到node-modules文件夹。 符合documentation和 this article我正在使
我正在尝试读取寓言 elmish 中的 Browser.Blob 对象 - 我可以在 javascript 中看到它是这样完成的,但我不确定如何处理 FileReader onload 事件。 var
我正在使用 fable 和 fabletools 包进行一些时间序列预测分析,我有兴趣比较单个模型和混合模型(包括我正在使用的各个模型)。 这是一些带有模拟数据框的示例代码:- library(fab
我是一名优秀的程序员,十分优秀!