使用寓言在 F# 中解析 Thenable<'> 的语法是什么?
What is the syntax for resolving Thenable<'t> in F# using fable?
我正在开发一个用 F# 编写的 vscode 扩展,使用 Fable 编译为 javascript。许多 api 的 return 的承诺。解析具有 return 类型(例如 F# 的 Thenable<string[]>
)的承诺的语法是什么?
这是 vscode 的许多 api 的示例:vscode api
看看 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>
的存在,并将每个 API 调用转换为 Fable 绑定中的 Promise<T>
。他们在 Helpers.fs, but I don't see those being used anywhere in the entire https://github.com/ionide/ionide-vscode-fsharp 存储库中确实有一对 toPromise
和 toThenable
函数。
我没有任何使用 Fable 的个人经验,所以如果这还不足以回答您的问题,希望其他人能提供更多信息。
在尝试了一些语法之后,我能够通过 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>>
使用上面的实用程序模块,我能够将 return Thenable 的函数转换为 Promises,这样它们就可以被重新调用。
let result = commands.getCommands ()
|> PromiseUtils.toPromise
|> PromiseUtils.success (fun item ->
let firstOne = item.Item 1
console.log(firstOne))
我正在开发一个用 F# 编写的 vscode 扩展,使用 Fable 编译为 javascript。许多 api 的 return 的承诺。解析具有 return 类型(例如 F# 的 Thenable<string[]>
)的承诺的语法是什么?
这是 vscode 的许多 api 的示例:vscode api
看看 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>
的存在,并将每个 API 调用转换为 Fable 绑定中的 Promise<T>
。他们在 Helpers.fs, but I don't see those being used anywhere in the entire https://github.com/ionide/ionide-vscode-fsharp 存储库中确实有一对 toPromise
和 toThenable
函数。
我没有任何使用 Fable 的个人经验,所以如果这还不足以回答您的问题,希望其他人能提供更多信息。
在尝试了一些语法之后,我能够通过 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>>
使用上面的实用程序模块,我能够将 return Thenable 的函数转换为 Promises,这样它们就可以被重新调用。
let result = commands.getCommands ()
|> PromiseUtils.toPromise
|> PromiseUtils.success (fun item ->
let firstOne = item.Item 1
console.log(firstOne))