在nodejs运行时中使用Javascript编译的Elm函数

好的,所以我正在使用 MongoDB Realm 函数,这是一个无服务器平台,您可以像这样定义函数:

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

我想问一下是否可以在 Elm 函数中编码并在 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在你的例子)为标志。然后,您将定义一个输出端口,您将在 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"


以上是在nodejs运行时中使用Javascript编译的Elm函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>