2017-02-23 52 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將監視文件更改,並在更改時殺死無處不在的進程,重新編譯並重新啓動。

相關問題