File tree Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Original file line number Diff line number Diff line change @@ -96,6 +96,24 @@ def respond_to_missing?(sym, include_private)
96
96
97
97
# Await a JavaScript Promise like `await` in JavaScript.
98
98
# This method looks like a synchronous method, but it actually runs asynchronously using fibers.
99
+ # In other words, the next line to the `await` call at Ruby source will be executed after the
100
+ # promise will be resolved. However, it does not block JavaScript event loop, so the next line
101
+ # to the `RubyVM.eval` or `RubyVM.evalAsync` (in the case when no `await` operator before the
102
+ # call expression) at JavaScript source will be executed without waiting for the promise.
103
+ #
104
+ # The below example shows how the execution order goes. It goes in the order of "step N"
105
+ #
106
+ # # In JavaScript
107
+ # const response = vm.evalAsync(`
108
+ # puts "step 1"
109
+ # JS.global.fetch("https://example.com").await
110
+ # puts "step 3"
111
+ # `) // => Promise
112
+ # console.log("step 2")
113
+ # await response
114
+ # console.log("step 4")
115
+ #
116
+ # The below examples show typical usage in Ruby
99
117
#
100
118
# JS.eval("return new Promise((ok) => setTimeout(ok(42), 1000))").await # => 42 (after 1 second)
101
119
# JS.global.fetch("https://example.com").await # => [object Response]
You can’t perform that action at this time.
0 commit comments