1# frozen_string_literal: true
2
3require "em_promise"
4
5module EM
6 def self.promise_defer(klass: EMPromise, &block)
7 promise = klass.new
8 EventMachine.defer(
9 block,
10 promise.method(:fulfill),
11 promise.method(:reject)
12 )
13 promise
14 end
15
16 def self.promise_fiber
17 promise = EMPromise.new
18 Fiber.new {
19 begin
20 promise.fulfill(yield)
21 rescue StandardError => e
22 promise.reject(e)
23 end
24 }.resume
25 promise
26 end
27
28 def self.promise_timer(timeout)
29 promise = EMPromise.new
30 EM.add_timer(timeout) do
31 promise.fulfill(nil)
32 end
33 promise
34 end
35end