簡體   English   中英

在 nodejs 運行時使用 Javascript 編譯 Elm function

[英]Using Javascript compiled Elm function inside nodejs runtime

好的,所以我正在使用 MongoDB Realm 函數,一個無服務器平台,您可以像這樣定義函數:

exports = async function(param1, param2){
   var result = {}
   // do stuff 
   return result;
}
if (typeof module === 'object') {
  module.exports = exports;
}

我想問是否可以在 Elm function 中編碼並在 nodejs 運行時中運行它? 換句話說,像這樣:

exports = async function(param1, param2){
   var result = {}
   // do stuff 
   // call elm compiled js
   return elmFunction(param1, param2);
}
var elmFunction = async function(param1, param2) {
  // generator elm code
};

是的,但這可能有點棘手。

首先,您需要使用Platform.worker設置您的 Elm 文件——這基本上是一個無頭 Elm 程序。

您通常會將同步可用的輸入(在您的示例中為param1param2 )作為標志傳遞。 然后,您將定義一個 output 端口,您將在 Elm 程序完成時調用該端口。 在 JS 方面,你會像這樣處理它:

exports = async function(param1, param2){
   const elmProgram = Elm.Main.init({flags: {param1, param2}});
   return new Promise((resolve) => {
     elmProgram.ports.outputPort.subscribe((result) => {
       resolve(result);
     });
   });
}

Elm 代碼可能如下所示(假設您的代碼是純代碼):

port module Main exposing (main)

import Json.Decode exposing (Value)
import Json.Encode

port outputPort : Value -> Cmd msg

main = 
    Platform.worker
        { init = init,
        , subscriptions = always Sub.none
        , update = \msg model -> (model, Cmd.none)
        }

init flags =
    case Json.Decode.decodeValue flagsDecoder flags of
        Ok input ->
            let
                 result = 
                      myFunction input 
            in
            ((), outputPort (resultEncoder result))
        
        Err e ->
            Debug.todo "error handling"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM