2016-08-02 1 views
2

Я работаю над расширением vscode, написанным в F #, используя Fable для компиляции в javascript. Многие из api возвращают обещание. Каков синтаксис для разрешения обещания с возвращаемыми типами, например Thenable<string[]> для F #?Что такое синтаксис для разрешения Thenable <'t> в F # с использованием fable?

Вот пример многих из API-интерфейсов для vscode: vscode api

ответ

2

После некоторой игры с синтаксисом я смог разобраться с подсказкой, которую дал rmunn с преобразованием Thenable to 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 обещаниям, чтобы они могли быть resloved.

let result = commands.getCommands() 
       |> PromiseUtils.toPromise 
       |> PromiseUtils.success (fun item -> 
        let firstOne = item.Item 1 
        console.log(firstOne)) 
2

Взгляните на то, как 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 в Promise<T> в их привязках Fable. У них есть пара toPromise и toThenable функций в Helpers.fs, но я не вижу, что они используются в любом месте всего репозитория https://github.com/ionide/ionide-vscode-fsharp.

У меня нет личного опыта работы с Fable, поэтому, если этого недостаточно, чтобы ответить на ваш вопрос, мы надеемся, что кто-то еще услышит дополнительную информацию.

+0

Да, я видел эти примеры. Тем не менее, я фактически не видел, как обещания были фактически решены (как вы уже упоминали, они не используются), потому что типы не совпадают. Я должен что-то упустить. – Korbin

Смежные вопросы