Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ClojureScript、Figwheel、Devcards、竞赛条件_Clojure - Fatal编程技术网

ClojureScript、Figwheel、Devcards、竞赛条件

ClojureScript、Figwheel、Devcards、竞赛条件,clojure,Clojure,这是我的最小失败案例 (ns hello (:require-macros [devcards.core :as dc]) (:require [reagent.core :as r] [devcards.core :as dc] [gamma.api :as g] [gamma.program :as p] [goog.dom :as gdom] [goog.webg

这是我的最小失败案例

(ns hello
  (:require-macros [devcards.core :as dc])
  (:require [reagent.core :as r]
            [devcards.core :as dc]
            [gamma.api :as g]
            [gamma.program :as p]
            [goog.dom :as gdom]
            [goog.webgl :as ggl]))


(defn main []
  (let [canvas (.getElementById js/document "webgl")
        gl (.getContext canvas "webgl")] ;; *** THIS LINE ***
    (.clearColor gl 0.0 0.0 0.0 1.0)
    (.clear gl gl.COLOR_BUFFER_BIT)))


(dc/defcard-rg canvas-example
  [:div
   [:canvas {:width 600
             :height 600
             :id "webgl"}]])


(main)
下面是我在figwheel/devcard中加载此文件时发生的情况

  • 第一次加载页面:*此行*上的“无法读取null的属性'getContext'。这是因为devcard画布尚未设置

  • 如果我做了无意义的更改并保存了文件,代码就会重新加载并正常工作。这是因为已经设置了devcard画布

  • 很明显,这是(a)运行(main)和(b)设置devcard:canvas之间的竞争条件

  • 我该如何解决这个问题?理想情况下,我想在画布上标记一些东西,说“在此之后运行主函数…”


  • 好吧,我知道了


    最简单的解决方案(即不涉及黑客攻击devcard/试剂)是每50毫秒进行一次单独的cljs/go线程检查,以查看元素是否存在,如果存在,则执行该函数。

    好的,我解决了这个问题

    最简单的解决方案(即不涉及黑客攻击devcard/Regent)是每50毫秒进行一次单独的cljs/go线程检查,以查看元素是否存在,如果存在,则执行该函数