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

在nodejs运行时内使用Javascript编译的Elm函数,javascript,elm,Javascript,Elm,好的,我使用的是MongoDB领域函数,一个无服务器平台,您可以这样定义函数: exports=async函数(param1,param2){ var result={} //做事 返回结果; } if(模块类型===‘对象’){ module.exports=导出; } 我想问一下,是否可以在Elm函数中编写代码并在nodejs运行时中运行它?换言之: exports=async函数(param1,param2){ var result={} //做事 //调用elm编译的js 返回函数(p

好的,我使用的是MongoDB领域函数,一个无服务器平台,您可以这样定义函数:

exports=async函数(param1,param2){
var result={}
//做事
返回结果;
}
if(模块类型===‘对象’){
module.exports=导出;
}
我想问一下,是否可以在Elm函数中编写代码并在nodejs运行时中运行它?换言之:

exports=async函数(param1,param2){
var result={}
//做事
//调用elm编译的js
返回函数(param1,param2);
}
var elmfonment=异步函数(param1,param2){
//生成器elm代码
};

是的,但可能有点棘手

首先,您需要使用-这基本上是一个无头Elm程序来设置Elm文件

通常,您会将同步可用的输入(示例中为
param1
param2
)作为标志传递。然后,您将定义一个输出端口,在Elm程序完成时从该端口调用。在JS端,您可以这样处理:

exports=async函数(param1,param2){
const-elmProgram=Elm.Main.init({flags:{param1,param2}});
返回新承诺((解决)=>{
elmProgram.ports.outputPort.subscribe((结果)=>{
决心(结果);
});
});
}
Elm代码可能如下所示(假设您的代码是纯代码):


在我看来,每个方法都是相互独立的,甚至独立于数据库访问,所有方法都是功能性的,可以独立进行单元测试。您可以将其推广到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"