在为Fable编写F#时,什么时候应该使用异步,什么时候应该使用promise?

时间:2019-01-02 16:19:10

标签: f# fable-f#

带有寓言的

F#提供了两个用于基于回调的代码的计算表达式:asyncpromise

async更像是idomatic F#,但我不清楚它在浏览器中的运行情况如何。理想情况下,我将可以在任何地方使用async,因为这可以使我在客户端和服务器之间实现更多的代码重用。

  • 浏览器中async的局限性是什么?
  • promise在服务器(例如dotnet核心)上有哪些限制
  • 我可以轻松地在两者之间切换吗? (例如包装fetch API)
  • 寓言中的偶像是什么?

注意:除了浏览器API外,我不需要与任何JavaScript互操作。

1 个答案:

答案 0 :(得分:1)

  

浏览器中异步的局限性是什么?

在浏览器中使用async时,不能使用Async.RunSynchronously。我认为这是一个限制,因为JavaScript是单线程的。

  

服务器(例如dotnet核心)上的promise有什么限制

您不能在服务器上使用promise,因为.Net或.NetCore不知道此计算。在.Net或.NetCore服务器上使用异步代码时,您需要使用async

如果服务器使用的是Node.js,则该限制与浏览器中的限制相同。

  

我可以轻松地在两者之间切换吗? (例如包装提取API)

fetch.Fetch和Fable.Promise中已经使用promise封装了fetch API。

    promise {
        let! res = fetch "http://fable.io" []
        let! txt = res.text()
        // Access your resource here
        Browser.console.log txt
    }

也可以通过打开Fable.Core来访问Async.AwaitPromiseAsync.StartAsPromise

  

寓言的惯用语是什么?

我个人使用promise只是因为它现在是JavaScript的本机功能,并且一般而言,即使您可以在promise和{之间移动,JavaScript库也希望您使用promise进行工作。 {1}}。