«TypeError: currentSubs [i] не является функцией» при использовании портов в Elm 0.19 - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь отправить данные из Elm 0.19 в JavaScript, используя порты.

Редактировать : Кажется, проблема связана с запуском / сборкой с elm-app

В Elm я объявляю исходящий порт:

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

, который я использую в функции update для создания Cmd, который отправляет JSON-кодированное значение в JavaScript.

В JS я создаю экземпляр приложения Elm:

const app = Elm.Main.init({
  node: document.getElementById('root')
});

и регистрирую обработчик данных:

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

Когда вызывается modelToJs, данные не отправляютсяи распечатывается на консоли.Вместо этого я получаю следующую ошибку во время выполнения JavasScript (которую Элм утверждает, что ее намеренно избегают):

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;

Я также предоставил полное подтверждение концепции проекта на GitHub: https://github.com/mpgirro/elm0.19-ports-issue

Репозиторий также содержит изображение сообщения об ошибке (извините, мне не хватает репутации для публикации изображений)

1 Ответ

2 голосов
/ 03 апреля 2019

Ошибка, по-видимому, в dataHandler.js. В настоящее время он содержит это:

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

Если вы объявите функцию как export default, проблема исчезнет:

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