问题描述
所以我使用 re-graph 版本 0.1.11 并尝试从端点获取数据。获取数据后,我检查了浏览器中的网络选项卡,然后我找到了预期的数据,它应该激活我的回调函数,但它似乎不起作用(但有时它起作用,刷新页面几次后它不起作用)再次工作)。这是代码。
;; how I init re-graph
(rf/dispatch [::re-graph/init
::conf/graphql-client-name
{:ws-url url
:http-url url
:ws-reconnect-timeout 500
:resume-subscriptions? true}])
(re-frame.core/reg-event-fx
::fetch-expected-data
(fn [cofx event]
(let [app-db (:db cofx)
some-params (-> event second (cljs.core/js->clj :keywordize-keys true))
token (-> app-db (lens/get-in (auth-db/lens-token :group-level-x)))]
(re-frame.core/dispatch
[:re-graph.core/query
::conf/graphql-client-name
"query findExpectedData($query: FetchExpectedDataInput!,$token: String!) {
findExpectedData(query: $query,token: $token){
value1
value2
...
}
}"
{:query some-params
:token token}
;; this is where the problem occurs
;; even though i found the data in the network tab,but
;; this callback doesn't seem to work (sometimes it works sometimes it doens't)
[::fetched-data-completed]]))))
(re-frame.core/reg-event-fx
::fetched-data-completed
(fn [cofx [_ {:keys [data errors] :as payload}]]
(let [app-db (:db cofx)
error-message (-> errors :errors first :message)]
(if (or (nil? errors) (empty? errors))
(do (bla bla when success))
(pr error-message)))))
我被这个问题困扰了几个月。也许是因为我同时获取了大量数据?或者可能是其他人知道的东西?顺便说一下,实际代码我使用的是 defmacro,但它的工作方式与上面的代码相同。
解决方法
所以我设法找到了我自己问题的答案。似乎 app-db 没有正确初始化,所以我解决了这个问题,一切正常。希望它可以帮助那些在这个问题上挣扎的人。