0

在我的卤素项目中有这个 eval 分支:

 eval (SetTest tName next) = do
      H.set (State Nothing)
      detail <- H.fromAff $ toAff settings $ getTestsByTestname (tName ^. unTestName)
      H.set (State (Just detail))
      pure next

如果停止执行 AJAX,则 toAff 位可能需要一段时间才能返回。在我的渲染功能中,我有

, case ts of
              Nothing ->
                HH.div [class_ BS.centerBlock]
                  [HH.i [classes (HH.className <$> ["fa", "fa-spinner", "fa-spin", "loading"])]
                     []
                  ]

              Just td ->
                HH.h3_ [HH.text $ td ^. tdName<<<unTestName]

我天真地期望在我的 aff 操作返回之前看到一个加载微调器,但看起来 eval 在呈现 html 之前一直运行。这个对吗?

编辑

原来这是用户错误 - 我以错误的顺序调用我的查询。未来的混乱:设置状态确实会更新 ui :-)

4

1 回答 1

1

不,在此期间修改状态eval确实应该触发渲染。除非您Aff不是真正异步的,否则我不确定为什么您不会在这里看到您所期望的。

你试过做类似的事情H.fromAff $ later' 5000 $ pure <some value>吗?later'来自哪里Control.Monad.Aff<some value>适合什么detail。然后,您应该会看到加载微调器 5 秒钟,然后它才解析为<some value>.

于 2017-01-13T20:54:12.410 回答