3

我正在开发一个用 F# 编写的 vscode 扩展,使用 Fable 编译为 javascript。许多 api 的返回一个承诺。解析具有Thenable<string[]>F# 等返回类型的 Promise 的语法是什么?

这是 vscode 的许多 api 的示例:vscode api

4

2 回答 2

3

看看 Ionide 是如何做到的:

https://github.com/ionide/ionide-vscode-helpers/blob/fable/Helpers.fs https://github.com/ionide/ionide-vscode-helpers/blob/fable/Fable.Import.VSCode.fs

基本上,看起来 Ionide 几乎忽略了 Fable 绑定中每个 API 调用的存在Thenable<T>并将每个 API 调用转换为 a Promise<T>它们在Helpers.fs中确实有一对toPromiseandtoThenable函数,但我看不到在整个https://github.com/ionide/ionide-vscode-fsharp存储库中的任何地方都使用了这些函数。

我对 Fable 没有任何个人经验,所以如果这还不足以回答您的问题,希望其他人能提供更多信息。

于 2016-08-02T09:09:23.570 回答
2

在玩了一些语法之后,我能够通过 rmunn 提供的将 Thenable 转换为 Promise 的线索来弄清楚。

module PromiseUtils =
  let success (a : 'T -> 'R) (pr : Promise<'T>) : Promise<'R> =
      pr?``then`` (unbox a) |> unbox

  let toPromise (a : Thenable<'T>) = a |> unbox<Promise<'T>>

  let toThenable (a : Promise<'T>) = a |> unbox<Thenable<'T>>

使用上面的实用程序模块,我能够将返回 Thenable 的函数转换为 Promises,以便重新使用它们。

  let result = commands.getCommands ()
               |> PromiseUtils.toPromise
               |> PromiseUtils.success (fun item -> 
                  let firstOne = item.Item 1
                  console.log(firstOne))
于 2016-08-03T03:48:11.363 回答