2016-08-02 2 views

Antwort

2

Nach einigen Spielen mit der Syntax, war ich in der Lage, es mit dem Hinweis herauszufinden, dass rmunn gab mit der Konvertierung der 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>> 

die Dienstprogramm-Modul über Verwendung, ich war in der Lage, die Funktionen zu konvertieren, die Thenable zu Promises zurückkehren, so dass sie resloved werden können.

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

einen Blick auf, wie Ionide tut es:

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

Grundsätzlich sieht es aus wie Ionide die fast ignoriert Existenz von Thenable<T> und konvertiert jeden API-Aufruf in eine Promise<T> in ihren Fable-Bindungen. Sie haben ein Paar von toPromise und toThenable Funktionen in Helpers.fs, aber ich sehe nicht, dass sie irgendwo im gesamten https://github.com/ionide/ionide-vscode-fsharp Repository verwendet werden.

Ich habe keine persönliche Erfahrung mit Fable, also, wenn dies nicht genug ist, um Ihre Frage zu beantworten, wird hoffentlich jemand anderes mit mehr Informationen einläuten.

+0

Ja, ich habe diese Beispiele gesehen. Allerdings habe ich nicht wirklich gesehen, wie die Versprechen tatsächlich gelöst wurden (wie du erwähnt hast, dass sie nicht benutzt wurden), weil die Typen nicht zusammenpassen. Ich muss etwas verpassen. – Korbin