module Kernel def promise(&block) p = Promise.new begin result = block.call return p.resolve(result) if result rescue => e return p.reject(e) end pr = proc do begin res = block.call res ? p.resolve(res) : after(10, &pr) rescue => e p.reject(e) end end after(10, &pr) p end if RUBY_ENGINE == 'opal' def on_browser?; true; end def on_desktop?; false; end def on_mobile?; false; end def on_tablet?; false; end def on_tv?; false; end def on_server?; false; end def after(time_ms, &block) `setTimeout(#{block.to_n}, time_ms)` end # TODO remove before release %x{ Opal.s = function() { return Opal.Isomorfeus.store.$get_state().$to_n(); } } else def on_browser?; false; end def on_desktop?; false; end def on_mobile?; false; end def on_tablet?; false; end def on_tv?; false; end def on_server?; true; end def after(time_ms, &block) sleep time_ms/1000 block.call end end end