卤素 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 (将#修改为@)