【问题标题】:How do I setInterval with CoffeeScript?如何使用 CoffeeScript 设置间隔?
【发布时间】:2011-11-12 08:26:53
【问题描述】:

我的 JavaScript 如下:

var util = require('util');
EventEmitter = require('events').EventEmitter;

var Ticker = function() {
      var self = this;
      setInterval( function() {
        self.emit('tick');
      }, 1000 );
    }

什么是等效的 CoffeeScript?

【问题讨论】:

  • 让我澄清一下...我不知道如何使用 CoffeeScript 将 2 个参数传递给函数。
  • 不知道为什么这被否决了,有人想关闭它,对我来说似乎是一个有效的问题......
  • +1 提醒我 CoffeeScript 有多棒 - 我还没有在项目中实际使用过它,但我想我想......很快!

标签: javascript coffeescript


【解决方案1】:
util = require 'util'

EventEmitter = require('events').EventEmitter

Ticker = ->
  self = this
  setInterval ->
    self.emit 'tick'
  , 1000
  true

您通过将逗号与您传递给的函数对齐来添加第二个参数,因此它知道第二个参数即将到来。

它也返回true而不是setInterval,虽然我个人看不出返回setInterval的好处。


这是一个带有粗箭头(参见 cmets)和解构赋值(参见其他评论)的版本。此外,返回 setInterval 而不是显式返回 true。

util = require 'util'

{EventEmitter} = require 'events'

Ticker = ->
  setInterval =>
    @emit 'tick'
  , 1000

【讨论】:

  • 如何让 CoffeeScript 不使用 return return setInterval(function() { return self.emit('tick'); }, 1000);
  • 它默认返回函数中的最后一件事,这绝不是一件坏事。如果您想避免返回 setInterval,只需在末尾添加其他内容,例如 true,就在我的代码中的逗号下方。
  • 不使用self = this,您可以使用setInterval => 之类的“胖箭头”将this 的外部值绑定到内部函数。 (Demo)
  • 您是否必须将self.emit 'tick' 更改为this.emit 'tick'
  • @BillyMoon:是的,我喜欢它。你甚至可以把它写成setInterval (=> @emit 'tick'), 1000
猜你喜欢
  • 2014-04-04
  • 2011-11-09
  • 2015-03-16
  • 2014-03-02
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多