@@ -2,6 +2,8 @@
22module Reflex.Dom.Xhr where
33
44#ifdef __GHCJS__
5+import Control.Concurrent
6+import Control.Concurrent.MVar
57import Control.Lens
68import Control.Monad
79import Control.Monad.IO.Class
@@ -77,6 +79,16 @@ performRequestAsync req = performEventAsync $ ffor req $ \r cb -> do
7779 liftIO $ newXMLHttpRequest r cb
7880 return ()
7981
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+
8092getAndDecode :: (FromJSON a, MonadWidget t m) => Event t String -> m (Event t (Maybe a))
8193getAndDecode url = do
8294 r <- performRequestAsync $ fmap (\x -> XhrRequest "GET" x def) url