gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:00:55 27 4
gpt4 key购买 nike

好的,所以我正在使用 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 文件。 - 这基本上是一个 headless 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"

关于javascript - 在 nodejs 运行时使用 Javascript 编译的 Elm 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66540120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com