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

sdg*_*sdh 5 f# fable-f#

带寓言的F#提供了两个计算表达式,用于处理基于回调的代码:asyncpromise

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

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

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

Max*_*gel 7

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

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
    }
Run Code Online (Sandbox Code Playgroud)

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

寓言的惯用语是什么?

就我个人而言,我promise之所以仅使用它是因为它现在是JavaScript的本机功能,并且一般而言,promise即使您可以在promise和之间移动,JavaScript库也希望您可以使用async