@@ -16,19 +16,6 @@ module JS
16
16
Undefined = JS . eval ( "return undefined" )
17
17
Null = JS . eval ( "return null" )
18
18
19
- def self . promise_scheduler
20
- @promise_scheduler
21
- end
22
-
23
- def self . eval_async ( code , future )
24
- @promise_scheduler ||= PromiseScheduler . new Fiber . current
25
- Fiber . new do
26
- future . resolve JS ::Object . wrap ( Kernel . eval ( code . to_s , nil , "eval_async" ) )
27
- rescue => e
28
- future . reject JS ::Object . wrap ( e )
29
- end . transfer
30
- end
31
-
32
19
class PromiseScheduler
33
20
Task = Struct . new ( :fiber , :status , :value )
34
21
@@ -66,6 +53,21 @@ def enqueue(task)
66
53
end
67
54
end
68
55
end
56
+
57
+ @promise_scheduler = PromiseScheduler . new Fiber . current
58
+
59
+ def self . promise_scheduler
60
+ @promise_scheduler
61
+ end
62
+
63
+ private
64
+ def self . __eval_async_rb ( rb_code , future )
65
+ Fiber . new do
66
+ future . resolve JS ::Object . wrap ( Kernel . eval ( rb_code . to_s , nil , "eval_async" ) )
67
+ rescue => e
68
+ future . reject JS ::Object . wrap ( e )
69
+ end . transfer
70
+ end
69
71
end
70
72
71
73
class JS ::Object
@@ -83,13 +85,9 @@ def respond_to_missing?(sym, include_private)
83
85
end
84
86
85
87
def await
86
- sched = JS . promise_scheduler
87
- unless sched
88
- raise "JS::Object#await can be used only in RubyVM.evalAsync"
89
- end
90
88
# Promise.resolve wrap a value or flattens promise-like object and its thenable chain
91
89
promise = JS . global [ :Promise ] . resolve ( self )
92
- sched . await ( promise )
90
+ JS . promise_scheduler . await ( promise )
93
91
end
94
92
end
95
93
0 commit comments