Использование узловых модулей из басни

Я пытаюсь импортировать модуль узла в мой код басни. Будучи новичком в басне, я ожидал, что проблемы и понимание потока импорта, похоже, будут одними из них. У меня есть код ниже, который хорошо компилируется, но не работает во время выполнения с Cannot read property 'request' of undefined на линии printfn заявление

module Session =
    let inline f (f: 'a->'b->'c->'d) = Func<_,_,_,_> f
    [<Import("default","request")>]
    type Http = 
    abstract request : string -> System.Func<obj,obj,obj,unit> -> unit
    let http : Http = failwith "js only"
    let start () = 

       http.request "http://dr.dk" (ff (fun error response body ->
           printfn "%A" body 
       ))
    do  
        start()

1 ответ

Мне удалось заставить ваш пример работать в Fable REPL:

      open System
open Fable
open Fable.Core
open Fable.Core.JS
open Fable.Core.JsInterop

type RequestCallback = Func<obj, obj, obj, unit>

type Request = Func<string, RequestCallback, unit>

[<ImportDefault("request")>]
let request : Request = jsNative

let start () = 
    request.Invoke("http://dr.dk", (fun error response body ->
        console.log("error", error)
        console.log("response", response)
        console.log("body", body)
    ))

start ()

А вот код JavaScript, который он сгенерировал:

      import request from "request";
import { some } from "fable-library/Option.js";

export function start() {
    request("http://dr.dk", (error, response, body) => {
        console.log(some("error"), error);
        console.log(some("response"), response);
        console.log(some("body"), body);
    });
}

start();

Обратите внимание, что привязки уже есть для многих модулей. Для этой конкретной задачи я бы предложил использоватьFable.Fetch. Если вам нужна библиотека, которая работает в браузере и .NET, попробуйтеFable.SimpleHttp.

Другие вопросы по тегам