Skip to content

Instantly share code, notes, and snippets.

@mloughran
Created October 22, 2009 12:56
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 mloughran/215933 to your computer and use it in GitHub Desktop.
Save mloughran/215933 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'eventmachine'
module EventMachine
# This returns a deferrable and catches errors in the block for you.
#
# Define callbacks and errbacks in usual way instead of weird EM.defer way
def self.better_defer?(&block)
deferrable = EM::DefaultDeferrable.new
EM.defer do
begin
output = block.call
deferrable.succeed output
rescue => e
deferrable.fail e
end
end
deferrable
end
end
# Example
EM.run {
deferrable1 = EM.better_defer? do
sleep 1
'done'
end
deferrable2 = EM.better_defer? do
raise "woops"
end
deferrable1.callback do |output|
puts "Deferrable 1 succeeded with #{output}"
end
deferrable2.errback do |ex|
puts "Deferrable 2 failed: #{ex.class} #{ex.message}"
end
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment