问题描述
我正在构建我的第一个卤素应用程序,它可以生成数独谜题。我让它在 Effect
中同步完成生成。但是,将其转换为 Aff
后,即使生成完成后,handleAction
函数也不会继续。
我的 handleAction
函数中的这段代码有效:(不过,它不会像我在阅读 Halogen Guide 时认为的那样在 H.modify (_ { loading = true })
上重新渲染)
...
Generate -> do
H.liftEffect $ log "generating..."
st <- H.modify (_ { loading = true })
sudoku <- H.liftEffect (generate $ fromState st) --<<<< this line does all the work
H.liftEffect $ log "generated this game:"
H.liftEffect $ log sudoku
H.modify_ (_ { loading = false,puzzle = sudoku })
当我使用以下内容更改生成线时,它会编译并运行,但日志永远不会注册生成的游戏,并且 loading
状态永远不会恢复为 false。
sudoku <- H.liftAff $ makeAff (\cb -> do
_ <- map (\x -> cb (Right x)) (generate $ fromState st)
pure (effectCanceler $ log "generation canceled"))
更新:
我克隆了卤素存储库并修改了工作示例应用程序,以查看它是否是我的应用程序中的其他内容。我尝试了 effects-aff-ajax 示例,它似乎有同样的问题。
该示例具有运行良好的代码:
MakeRequest event -> do
H.liftEffect $ Event.preventDefault event
username <- H.gets _.username
H.modify_ (_ { loading = true })
-- I replaced this line vv
response <- H.liftAff $ AX.get AXRF.string ("https://api.github.com/users/" <> username)
H.modify_ (_ { loading = false,result = map _.body (hush response) })
当我将 aff 行替换为以下内容时,动作永远不会以相同的方式继续超过 aff 值:
response <- H.liftAff $ makeAff (\cb -> do
_ <- map (\x -> cb (Right x)) (pure $ Right "ASYNC STUFF")
pure (effectCanceler $ log "async stuff canceled"))
更新 2:
交叉发布到 purescript discourse。在这里链接,因为我不想重复任何努力。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)