gpt4 book ai didi

clojure - 如何在 ClojureScript 中使用 `setTimeout`?

转载 作者:行者123 更新时间:2023-12-02 11:24:32 25 4
gpt4 key购买 nike

我正在尝试在 ClojureScript(带试剂)中创建 sleep 功能:

(ns cljweb.webpage
(:require [reagent.core :as reagent]))

(def temp-atom (reagent/atom 0))

(defn sleep [msec]
(js/setTimeout (fn []) msec))

(defn page []
[:div
[:p @temp-atom]
[:button
{:on-click
(fn []
(sleep 3000)
(swap! temp-atom inc))}
"Click me!"]])

出于某种原因,这不能正常 sleep - 当我点击“点击我!”按钮, temp-atom立即增加 - 当我计时时,把它放在 page 之后:

[:p (time (sleep 3000))]

我在控制台中得到这个:

"Elapsed time: 0.015000 msecs"

我在代码中做错了什么?

最佳答案

Javascript 的 setTimeout 函数接受两个参数:函数和超时(以毫秒为单位)。它的合约是在超时过后运行接收到的函数。

您的代码没有传递您想在 3 秒后执行的函数,而是传递一个无操作函数 ( (fn []) )。

您的 sleep函数应该是这样的(最好命名为 timeout 或者你可以直接在你的点击处理程序中调用 js/setTimeout):

(defn sleep [f ms]
(js/setTimeout f ms))

您还需要更改调用此函数的方式:
(sleep #(swap! temp-atom inc) 3000)

或调用 js/setTimeout直接地:
(js/setTimeout #(swap! temp-atom inc) 3000)

关于clojure - 如何在 ClojureScript 中使用 `setTimeout`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43134593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com