1
这是我最小的失败案例。ClojureScript,Figwheel,Devcards,Race Condition
(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中加载它时发生的情况。
第一次加载页面:上*此行* “无法读取属性 '的getContext' 空的”。这是因为devcard画布尚未设置。
如果我做了一个毫无意义的更改并保存文件,代码重新加载并正常工作。这是因为devcard canvas已经设置好了。
很明显,这是(a)当(主)运行时和(b)当devcard's:canvas被设置时的竞态条件。
我该如何解决这个问题?理想情况下,我想在画布上标注“在此之后运行主要功能...”