# frozen_string_literal: true require "em_promise" module EM def self.promise_defer(klass: EMPromise, &block) promise = klass.new EventMachine.defer( block, promise.method(:fulfill), promise.method(:reject) ) promise end def self.promise_fiber promise = EMPromise.new Fiber.new { begin promise.fulfill(yield) rescue StandardError => e promise.reject(e) end }.resume promise end def self.promise_timer(timeout) promise = EMPromise.new EM.add_timer(timeout) do promise.fulfill(nil) end promise end end