1
我有用Eff
s和Aff
s編寫的以下程序。按預期運行。這是它打印出給定的Int
,它做了異步計算。爲什麼我的效果被調用兩次?
type JsonResponse = AffjaxResponse Json
access :: forall e m. Aff (ajax :: AJAX | e) (Either Error JsonResponse)
access = attempt $ get "http://localhost:8080/livesys/Robert"
staging :: forall e. Int -> Eff (console :: CONSOLE | e) Int
staging i = do
liftEff $ log $ ">>" ++ show i
return i
main :: forall a. Int -> Aff (ajax :: AJAX, console :: CONSOLE| a) Int
main state = do
s <- liftEff $ staging state
a <- liftAff access
return s
如果我改變調用但內部秩序main
然後神祕的東西發生了:
main :: forall a. Int -> Aff (ajax :: AJAX, console :: CONSOLE| a) Int
main state = do
a <- liftAff access
s <- liftEff $ staging state
return s
功能staging
現在被稱爲兩次!武漢理工大學?
有人可以解釋一下嗎?
感謝您的幫助
如果您在'main'中刪除對'liftAff'的調用會發生什麼?我不認爲這是必要的。 (不要原諒這種行爲,這確實看起來是錯誤的;我只是想診斷) – hdgarrood
沒有變化。唯一有點「異國情調」的是我使用的是https://github.com/sectore/purescript-webpack-vanilla-hmr。儘管如此,它應該表現一貫(或者總是2次或者總是一次,但是在不同的訂單上沒有不同) – robkuz
同意。你可以通過'psc-bundle'運行上述程序並將其上傳到一個pastebin? – hdgarrood