在Elm 0.19中使用端口时,“ TypeError:currentSubs [i]不是函数”

时间:2019-04-02 20:00:00

标签: elm

我正在尝试使用端口将数据从Elm 0.19发送到JavaScript。

编辑:该问题似乎与使用elm-app运行/构建有关

在榆树中,我声明了出站端口:

port modelToJs : Json.Encode.Value -> Cmd msg

我在update函数中使用它来生成一个Cmd,该const app = Elm.Main.init({ node: document.getElementById('root') }); 将JSON编码的值发送到JavaScript。

在JS中,我实例化了Elm应用程序:

app.ports.modelToJs.subscribe(function dataHandler(data) {
    console.log("got from Elm:" + data);
});

并注册数据处理程序:

modelToJs

调用TypeError: currentSubs[i] is not a function var value = _Json_unwrap(converter(cmdList.a)); 2160 | for (var i = 0; i < currentSubs.length; i++) 2161 | { > 2162 | currentSubs[i](value); 2163 | } 2164 | } 2165 | return init; 时,不会发送数据并将其打印到控制台。相反,我得到了以下JavasScript运行时错误(Elm声称可以通过设计避免此错误):

{{1}}

我还在GitHub上提供了完整的概念验证项目:https://github.com/mpgirro/elm0.19-ports-issue

回购还包含错误消息的图像(很抱歉,我缺乏发布图像的声誉)

1 个答案:

答案 0 :(得分:2)

错误似乎出在dataHandler.js中。当前包含以下内容:

function dataHandler(data) {
    console.log("got from Elm:" + data);
}

如果将函数声明为export default,问题将消失:

export default function dataHandler(data) {
    console.log("got from Elm:" + data);
}