Atom 包 - setInterval 不调用函数

Atom package - setInterval not calling the function

我目前正在为 atom 开发一个包,其中涉及在 canvas 上绘制曲线。无论出于何种原因,以下代码在调用 handleClickDown 时记录“mouseDown”而从未记录“hi”。我试过不使用 window.,但记录的仍然是“mouseDown”。如果该上下文有帮助,则每次单击 canvas 时都会调用 handleClickDown 函数。我确定我只是不了解 setInterval / coffescript 的工作原理,因为我是 atom 和 coffescript 的新手。感谢任何帮助。

@printhi: ->
     console.log "hi"

handleClickDown: (event, element) ->
     console.log "mouseDown"
     @mouseDownId = window.setInterval(@printhi,100)

编辑:下面的代码似乎 运行 没问题

console.log "mouseDown"
@mouseDownId = setInterval(()=>
    console.log "inner"
,75)

然而,当使用这样的函数时,它会抛出一个错误 _this.printhi is not a function

@printhi = () ->
    console.log "hi"

handleClickDown: (event, element) ->
    console.log "mouseDown"
    @mouseDownId = setInterval(()=>
        @printhi()
    ,75)

好吧,只是在这里回答我自己的问题,因为我最终弄明白了。事实证明,我对 @ 和 => 在 coffeescript 中的工作方式有点困惑。您实际上需要从 @printhi: -> 中删除 @,使其变为 printhi: ->,然后仅在您这样调用它时使用它 @printhi().

下面的代码对我有用,希望有人觉得这有用

printhi: ->
    console.log "hi"

handleClickDown: (event, element) ->
    console.log "mouseDown"
    @mouseDownId = setInterval(()=>
        @printhi()
    ,75)