簡體   English   中英

ClojureScript,Figwheel,Devcards,Race Condition

[英]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中加載它時會發生什么。

  1. 第一次加載頁面:“無法在* THIS LINE *上讀取屬性'getContext'的null”。 這是因為尚未設置devcard畫布。

  2. 如果我做了一個毫無意義的更改並保存文件,代碼重新加載並正常工作。 這是因為已經設置了devcard canvas。

  3. 很明顯這是(a)當(主)運行和(b)devcard's:canvas設置之間的競爭條件。

  4. 我該如何解決? 理想情況下,我想在畫布上標記“在此之后運行主要功能......”

好的,我想出來了。

最簡單的解決方案(即不涉及破解devcard /試劑)是每隔50ms進行一次單獨的cljs / go線程檢查以查看元素是否存在,如果存在,則執行該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM