我正在使用Fable编写的vscode扩展,使用Fable编译为javascript。许多api都回应了承诺。解析具有返回类型的承诺的语法是什么,例如F#的Thenable<string[]>
?
以下是vscode的许多api的示例:vscode api
答案 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中确实有一对toPromise
和toThenable
函数,但我没有看到它们在整个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))