微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

卤素 Aff 未完成

如何解决卤素 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 举报,一经查实,本站将立刻删除。