Error handling Clojurescript/试剂处理错误

Error handling Clojurescript/试剂处理错误,error-handling,clojurescript,om,reagent,Error Handling,Clojurescript,Om,Reagent,我们开始在产品的下一个开发阶段使用Clojuescript/试剂。基本上,我们需要一种方法,对原子进行一次操作,我们提出了一种方法,如: (def应用程序状态(r/atom{})) 基本上,交换得到一个函数,其中所有需要的操作都是链接的。太棒了。然而,我正在寻找处理错误的方法。我想要一个单独的原子来处理错误: (def errors (r/atom [])) 当发生错误时,捕获错误并将其添加到错误中,而无需交换应用程序状态(应用程序保持在上次稳定状态)。所以我们使用了链子上的投掷和一个试弹跳

我们开始在产品的下一个开发阶段使用Clojuescript/试剂。基本上,我们需要一种方法,对原子进行一次操作,我们提出了一种方法,如: (def应用程序状态(r/atom{}))

基本上,交换得到一个函数,其中所有需要的操作都是链接的。太棒了。然而,我正在寻找处理错误的方法。我想要一个单独的原子来处理错误:

(def errors (r/atom []))
当发生错误时,捕获错误并将其添加到错误中,而无需交换应用程序状态(应用程序保持在上次稳定状态)。所以我们使用了链子上的投掷和一个试弹跳

(defn change-title [title]
  (try
    (swap! app-state
       #(-> %
            (assoc :text title)
            ((fn [state] 
               (throw "there is an error")))
            ))
    (catch js/Object e
      (swap! errors conj e))))
因此,我希望能够捕获错误,并且@errors能够捕获错误。但现实是:

*未捕获有错误

天气应用程序$core$change\u title@core.cljs?rel=1450266738018:59(匿名函数)@core.cljs?rel=1450266738018:108 executeDispatch@react with addons.inc.js:3311 SimpleEventPlugin.executeDispatch@react with addons.inc.js:17428forEachEventDispatch@react with addons.inc.js:3299 ExecutedispatchesNorder@react with addons.inc.js:3320 Executedispatchedesandrelease@react with addons.inc.js:2693Foreached@react with addons.inc.js:19430EventPluginHub.processEventQueue@react with addons.inc.js:2900runEventQueueInBatch@react with addons.inc.js:11217ReactEventEmitterMixin.HandletoLevel@react with addons.inc.js:11243HandletoLevel@react with addons.inc.js:11329Mixin.perform@与插件反应。inc.js:18402ReactDefaultBatchingStrategy.BatchedUpdate@react with addons.inc.js:9669BatchedUpdate@react with addons.inc.js:16633ReactEventListener.dispatchEvent@react with addons.inc.js:11423*

(catch :default e
  (swap! errors conj e))))
因为抛出的字符串不是对象,而是字符串


因为抛出的字符串不是对象,而是字符串

我真的很担心看到这种ratoms到处都是。您可以在小规模上解决这个问题,但随着应用程序的不断扩大,它将成为一个问题。你会受伤的。使用类似于re-frame的东西(警告:我是作者)或发明你自己的变体。Mike,我已经看过re-frame,我们喜欢它(还有试剂和re-frame的文档),但我认为现在没有必要。一年多以来,我们一直在用javascript开发一个单一的不可变应用程序状态,这是一个相当大的应用程序,我们没有遇到任何问题,我的同事们已经习惯了这种工作方式。应用程序基本上只有两个原子-应用程序状态和历史。看到这种到处都是的RATOM,我真的很担心。您可以在小规模上解决这个问题,但随着应用程序的不断扩大,它将成为一个问题。你会受伤的。使用类似于re-frame的东西(警告:我是作者)或发明你自己的变体。Mike,我已经看过re-frame,我们喜欢它(还有试剂和re-frame的文档),但我认为现在没有必要。一年多以来,我们一直在用javascript开发一个单一的不可变应用程序状态,这是一个相当大的应用程序,我们没有遇到任何问题,我的同事们已经习惯了这种工作方式。应用程序基本上只有两个原子-应用程序状态和历史。
(catch :default e
  (swap! errors conj e))))