据我了解
Cmd.OfAsyn.perform
有三个输入:
Cmd.OfAsync.perform
asyncFunction // The async function to perform
input // Input to the async function
successMessage // Message to dispatch on success
成功消息应该引用另一条消息,最终结果为
Cmd.none
。
在我的示例中,我想从浏览器下载文件,但收到错误:
This expression was expected to have 'unit -> 'a' but here has type 'Message'
我的代码是:
| DownloadFile ->
let downloadCmd =
Cmd.OfAsync.perform
(fun _ -> async { Browser.Dom.window.location.href <- "/api/file/download"} )
()
// The below line throws the error.
FileDownloaded
{ model with IsDownloading = true }, downloadCmd
| FileDownloaded ->
{ model with IsDownloading = false }, Cmd.none
我不明白为什么
FileDownloaded
预计有类型单位'。
我的错误在哪里?
我不明白为什么 FileDownloaded 预计具有类型 unit。我的错误在哪里?
实际上是
unit -> 'a
(在本例中 'a
是 Message
类型,请参阅 source)。 Cmd.OfAsync.perform
的最后一个参数是一个返回消息的函数,而不是消息本身。
要修复,请更改:
FileDownloaded
至:
(fun _ -> FileDownloaded)