lib/puppeteer/concurrent_ruby_utils.rb in puppeteer-ruby-0.0.21 vs lib/puppeteer/concurrent_ruby_utils.rb in puppeteer-ruby-0.0.22
- old
+ new
@@ -2,24 +2,32 @@
module Puppeteer::ConcurrentRubyUtils
# wait for all promises.
# REMARK: This method doesn't assure the order of calling.
# for example, await_all(async1, async2) calls calls2 -> calls1 often.
def await_all(*args)
- if args.length == 1 && args[0].is_a?(Enumerable)
- Concurrent::Promises.zip(*(args[0])).value!
+ if args.length == 1 && args.first.is_a?(Enumerable)
+ await_all(*args.first)
else
+ if args.any? { |arg| !arg.is_a?(Concurrent::Promises::Future) }
+ raise ArgumentError.new("All argument must be a Future: #{args}")
+ end
+
Concurrent::Promises.zip(*args).value!
end
end
# wait for first promises.
# REMARK: This method doesn't assure the order of calling.
# for example, await_all(async1, async2) calls calls2 -> calls1 often.
def await_any(*args)
- if args.length == 1 && args[0].is_a?(Enumerable)
- Concurrent::Promises.any(*(args[0])).value!
+ if args.length == 1 && args.first.is_a?(Enumerable)
+ await_any(*args.first)
else
+ if args.any? { |arg| !arg.is_a?(Concurrent::Promises::Future) }
+ raise ArgumentError.new("All argument must be a Future: #{args}")
+ end
+
Concurrent::Promises.any(*args).value!
end
end
# blocking get value of Future.
@@ -30,10 +38,15 @@
future_or_value
end
end
def future(&block)
- Concurrent::Promises.future(&block)
+ Concurrent::Promises.future do
+ block.call
+ rescue => err
+ Logger.new($stderr).warn(err)
+ raise err
+ end
end
def resolvable_future(&block)
future = Concurrent::Promises.resolvable_future
if block