Skip to content

Instantly share code, notes, and snippets.

@chrisyour
Created January 3, 2011 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisyour/763702 to your computer and use it in GitHub Desktop.
Save chrisyour/763702 to your computer and use it in GitHub Desktop.
Possible Ruby ways to write setTimeout methods in CoffeeScript

Possible Ruby ways to write setTimeout methods in CoffeeScript

Ruby:

def start_timer
  setTimeout(time_is_up, 2000)
end

def time_is_up
  alert "Time's up!"
end

start_timer

JavaScript output:

var start_timer, time_is_up;
start_timer = function(){
  return setTimeout('time_is_up()', 2000);
}
time_is_up = function(){
  return alert("Time's up!");
}
start_timer();

Start the timer by passing in the callback and timeout params

Ruby:

def start_timer(callback, timeout)
  setTimeout(callback, timeout)
end

def time_is_up
  alert "Time's up!"
end

start_timer(time_is_up, 2000)

JavaScript output:

var start_timer, time_is_up;
start_timer = function(callback, timeout){
  return setTimeout(callback, timeout);
}
time_is_up = function(){
  return alert("Time's up!");
}
start_timer('time_is_up', 2000);

You could easily clear a timeout

Ruby:

def start_timer(callback, timeout)
  setTimeout(callback, timeout)
end

def time_is_up
  alert "Time's up!"
end

timer_id = start_timer(time_is_up, 2000)
clearTimeout(timer_id)

JavaScript output:

var start_timer, time_is_up, timer_id;
start_timer = function(callback, timeout){
  alert("Setting timer...")
  return setTimeout(callback, timeout);
}
time_is_up = function(){
  return alert("Time's up!");
}
timer_id = start_timer('time_is_up()', 2000);
clearTimeout(timer_id);

Sending an inline function to setTimeout: (Perhaps this would be a good place for a proc)

Ruby:

timer_id = setTimeout(Proc.new { alert "Time's up!" }, 2000)

JavaScript output:

var timer_id;
timer_id = setTimeout('alert("Time's up!");', 2000);

An inline proc with multiple statements:

Ruby:

def time_is_up
  alert "Time's up!"
end

def start_timer
  setTimeout(Proc.new { time_is_up; restart_timer; }, 5000);
end

def restart_timer
  start_timer
end

start_timer

JavaScript output:

var time_is_up, start_timer, restart_timer, timer_id;
time_is_up = function(){
  return alert("Time's up!");
}
start_timer = function(){
  setTimeout('time_is_up(); restart_timer();', 5000);
}
restart_timer = function(){
  start_timer();
}
start_timer();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment