如何解决卤素 Aff 未完成
我正在构建我的第一个卤素应用程序,它可以生成数独谜题。我让它在 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 举报,一经查实,本站将立刻删除。