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