gpt4 book ai didi

clojure - ClojureScript 中回调内部的 clearInterval

转载 作者:行者123 更新时间:2023-12-04 22:58:05 24 4
gpt4 key购买 nike

基本上,我想要的是在 ClojureScript 中实现这段代码:

var win = window.open('foo.html', 'windowName');   
var timer = setInterval(function() {
if(win.closed) {
clearInterval(timer);
alert('closed');
}
}, 1000);

我试过这个:
(let [popup (.open js/window "foo.html" "windowName")
interval (.setInterval
js/window
(fn []
(when (.-closed popup)
(do
;; 'interval' is undefined at this point
(.clearInterval js/window interval)

(.alert js/window 'closed')))
1000)]
...)

但是 CLJS 编译器给了我一个警告 interval没有定义。

有任何想法吗?

最佳答案

问题是您访问 interval在定义绑定(bind)之前在匿名函数中进行本地绑定(bind)(在绑定(bind)到 interval 符号之前,必须首先评估右侧,并且在此之前未定义 interval

您可以通过定义一个存储间隔的原子并从回调函数访问它来解决它:

(let [popup (.open js/window 'foo.html', 'windowName')
interval (atom nil)]
(reset! interval (.setInterval
js/window
(fn []
(when (.-closed popup)
(do
(.clearInterval js/window @interval)
(.alert js/window "Closed")))))))

我不确定是否有更优雅的方法可以使用带有间隔回调的方法来实现它。

关于clojure - ClojureScript 中回调内部的 clearInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36401144/

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