2017-02-23 69 views
0

我一直在玩purescript和信号。我有一个代码块runSignal在浏览器中工作,但不在节​​点控制台上

runSignal $ (every 2000.0) ~> logShow 

,当作为

main = do 
     runSignal $ (every 2000.0) ~> logShow 

编译成JS文件(纸浆browserify),并在浏览器上执行,按预期工作(原木的东西每2秒),但卡在psci控制台上。这是为什么?任何帮助,将不胜感激。

回答

0

PSCI有两种模式:

  • 它可以使用节点已编译JS(缺省模式)的执行。在这种模式下,它为每个表达式启动一个新的Node进程,并在控制台中同步打印结果。
  • 它可以使用web浏览器通过websocket执行(使用--port选项)。在这种模式下,它将JS的片段发送到长时间运行的浏览器进程。

在第一种模式下,runSignal是不会做任何有趣的,因为它会启动一个定时器并立即返回,但你也许可以得到一些使用第二模式容易的工作。

+0

谢谢菲尔。但是下一个psci提示符在运行这行时甚至没有显示。它被卡住了,我必须做一个^ C来打断它。这是等待这个表达式结果的节点进程同步运行的结果吗? –

+0

是的,没错。 –

0

我见过类似的行为与psci中的无休止的过程。一个简单的例子是...

module NeverEnding where 

import Prelude 
import Control.Monad.Eff.Console (log) 
import Control.Monad.Rec.Class (forever) 

main = forever $ do 
    log "log" 

如果您在PSCI装载该模块和运行main,你不会看到任何输出。从工作流的角度来看,如果你想从控制台测试这样的东西,我建议运行pulp --watch run --main NeverEnding--main会将您想要的模块设置为主入口点。 --watch将监视文件更改,并在更改时杀死无处不在的进程,重新编译并重新启动。

相关问题