Elm 输出端口无法使用从 StartApp 派生的信号

Elm output port is not working with a signal derived from StartApp

我们正在学习 Elm 基础知识,并使用以下设置构建一个带有一些音频输出的简单应用程序:

使用来自 Time.every 的信号,端口工作(ports/audio.js 中的代码是 运行)。此外,我们得到 "ping" 日志 Debug.log.

port audio : Signal Int
port audio =
  Signal.map (always 400) (Time.every Time.second)
  |> Signal.map (Debug.log "ping")

但是,当我们使用从 StartApp 的 App.model 派生的信号时,我们会得到一个信号(因为 "ping" 日志和 Debug.log 被记录)但是 JS 端口没有无法正常工作(ports/audio.js 中的代码不是 运行)?

port audio : Signal Int
port audio =
  Signal.map (always 400) signalDerivedFromStartApp
  |> Signal.map (Debug.log "ping")

这可能是一些与 Elm 相关的基础知识 signals/ports/StartApp?

我们的专家朋友发现了问题:因为我们在两个地方使用了 Elm.main,所以我们的设置被破坏了

  • ports/audio.js 有 Elm.worker(Elm.Main, {});
  • index.html 有脚本 Elm.fullscreen(Elm.Main)

-> 从 audio.js 中删除 Elm.worker 内容并将 audio.js 插入 index.html 的端口实现后,内容已修复。

(这可能不是针对此案例的 perfect/final 解决方案,但已解决我们当前设置的问题)