Method: Ferrum::Frame::Runtime#evaluate_async

Defined in:
lib/ferrum/frame/runtime.rb

#evaluate_async(expression, wait, *args) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ferrum/frame/runtime.rb', line 53

def evaluate_async(expression, wait, *args)
  template = <<~JS
    function() {
      return new Promise((__f, __r) => {
        try {
          arguments[arguments.length] = r => __f(r);
          arguments.length = arguments.length + 1;
          setTimeout(() => __r(new Error("timed out promise")), %s);
          %s
        } catch(error) {
          __r(error);
        }
      });
    }
  JS

  expression = template % [wait * 1000, expression]
  call(expression: expression, arguments: args, awaitPromise: true)
end