解析Thenable<&t; t>的语法是什么?在F#中使用寓言?

时间:2016-08-02 07:45:07

标签: f# visual-studio-code vscode-extensions fable-f#

我正在使用Fable编写的vscode扩展,使用Fable编译为javascript。许多api都回应了承诺。解析具有返回类型的承诺的语法是什么,例如F#的Thenable<string[]>

以下是vscode的许多api的示例:vscode api

2 个答案:

答案 0 :(得分: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几乎忽略了Thenable<T>的存在,并在其Fable绑定中将每个API调用转换为Promise<T>。它们在Helpers.fs中确实有一对toPromisetoThenable函数,但我没有看到它们在整个https://github.com/ionide/ionide-vscode-fsharp存储库中的任何位置使用过。

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

答案 1 :(得分: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))