Hi Thomas,

the code I pasted was maybe a bit misleading.

Function one:
(defn save-transformation [_]
  (go (let [trans-name (hel/get-value "transformation-name")
            [ok _] (<! (hel/post-async->ch "/cvs/save-transformation"
                                           {:name trans-name
                                            :data 
@sess/transform-history-cur}))]
        (if ok (do(swap! sess/transformations-cur conj {:name "foo-name"})
                   (h/show-success-message "notification-div" "Transformation 
Saved."))
               (h/show-error-message "notification-div" "Could not save 
Transformation. Something went wrong."))))
  (swap! sess/transformations-cur conj {:name "foo-name"}))

Function two:
(defn save-transformation [_]
  (go (let [trans-name (hel/get-value "transformation-name")
            [ok _] (<! (hel/post-async->ch "/cvs/save-transformation"
                                           {:name trans-name
                                            :data 
@sess/transform-history-cur}))]
        (if ok (do nil )
               (h/show-error-message "notification-div" "Could not save 
Transformation. Something went wrong."))))
  (swap! sess/transformations-cur conj {:name "foo-name"}))

Function two works, function one does not. The only difference is when the swap 
on the cursor happens, either inside the go block (won't work) or outside the 
go block (does work).

This is the asnyc code I am calling in both cases:

(defn post-async->ch [url method content]
  (let [ch (chan 1)]
    (ajax/ajax-request
      {:uri             url
       :method          method
       :params          content
       :format          (ajax/transit-request-format)
       :response-format (ajax/transit-response-format)
       :handler         (fn [resp](put! ch resp))})
    ch))

The error message indeed seems weird, but everything I tried so far indicates a 
bug or a missing feature in core.async.

In the meantime I even refactored my code to remove every core.async bit from 
the ajax calls and it works as expected then (by working with callbacks 
instead).

Best Regards,
Sven

Am Mittwoch, 24. Dezember 2014 14:23:35 UTC+1 schrieb Thomas Heller:
> Cannot say without the rest of the code but I what is in (:transformations 
> resp)? sorted-set doesn't work if one item doesn't compare to another (eg. 
> numbers vs maps).
> 
> Suppose:
> 
> (def a (atom #{}))
> => (var user/a)
> (reset! a (into (sorted-set) [1 2 2 2 3]))
> => #{1 2 3}
> (conj @a {:name "test"})
> ClassCastException clojure.lang.PersistentArrayMap cannot be cast to 
> java.lang.Comparable  clojure.lang.Util.compare (Util.java:153)
> 
> Doesn't look like a core.async issue?
> 
> 
> HTH,
> /thomas
> 
> 
> On Wednesday, December 24, 2014 11:19:04 AM UTC+1, Sven Richter wrote:
> > Hi,
> > 
> > Using the latest core.async (v0.1.346.0-17112a-alpha) updating a sorted set 
> > results in an error.
> > 
> > I have this code:
> > 
> > (defn get-transformations []
> >   (go (let [[ok resp] (<! (h/get-async "/csv/all-transformations"))]
> >         ;(when ok (reset! sess/transformations-cur (:transformations resp)) 
> > ;works
> >         (when ok (reset! sess/transformations-cur (into (sorted-set) 
> > (:transformations resp))) ;does not work
> >                  (println (conj @sess/transformations-cur {:name 
> > "test"}))))))
> > 
> > where transformations-cur is a reagent cursor on a reagent atom.
> > 
> > The second reset throws this error (Actually the error occurs on updating 
> > the cursor (conj @sess/transformations-cur {:name "test"})):
> > Uncaught Error: compare on non-nil objects of different types in 
> > ioc_helpers:41
> > 
> > Are sorted sets not supported?
> > 
> > How do others keep there sets / lists sorted in the UI?
> > 
> > Of course I could sort it every time I display it, but it seems to be more 
> > correct to keep it sorted inside the state.
> > 
> > Best Regards,
> > Sven

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to