on develop help sign in
performRequestsAsync
3033f31Ali Abrar
src/Reflex/Dom/Xhr.hs+12
@@ -2,6 +2,8 @@
2module Reflex.Dom.Xhr where
2module Reflex.Dom.Xhr where
3
3
4#ifdef __GHCJS__
4#ifdef __GHCJS__
5+import Control.Concurrent
6+import Control.Concurrent.MVar
5import Control.Lens
7import Control.Lens
6import Control.Monad
8import Control.Monad
7import Control.Monad.IO.Class
9import Control.Monad.IO.Class
@@ -77,6 +79,16 @@ performRequestAsync req = performEventAsync $ ffor req $ \r cb -> do
77 liftIO $ newXMLHttpRequest r cb
79 liftIO $ newXMLHttpRequest r cb
78 return ()
80 return ()
79
81
82+performRequestsAsync :: (Traversable f, MonadWidget t m) => Event t (f XhrRequest) -> m (Event t (f XhrResponse))
83+performRequestsAsync req = performEventAsync $ ffor req $ \rs cb -> do
84+ liftIO $ do
85+ resps <- forM rs $ \r -> do
86+ resp <- newEmptyMVar
87+ newXMLHttpRequest r $ putMVar resp
88+ return resp
89+ forkIO $ cb =<< forM resps takeMVar
90+ return ()
91+
80getAndDecode :: (FromJSON a, MonadWidget t m) => Event t String -> m (Event t (Maybe a))
92getAndDecode :: (FromJSON a, MonadWidget t m) => Event t String -> m (Event t (Maybe a))
81getAndDecode url = do
93getAndDecode url = do
82 r <- performRequestAsync $ fmap (\x -> XhrRequest "GET" x def) url
94 r <- performRequestAsync $ fmap (\x -> XhrRequest "GET" x def) url