27 v8::Local<v8::Promise::Resolver> NewPromiseResolver() {
28 return v8::Promise::Resolver::New(
GetIsolate()->GetCurrentContext())
32 v8::Local<v8::Promise> GetPromise(v8::Local<v8::Promise::Resolver> resolver) {
33 return resolver->GetPromise();
35 #elif defined(USING_JSC) 36 Handle<JSObjectRef> NewPromise(WeakJsPtr<JsObject>* resolve,
37 WeakJsPtr<JsObject>* reject) {
38 auto callback = [&](Callback on_resolve, Callback on_reject) {
39 *resolve = UnsafeJsCast<JsObject>(on_resolve.ToJsValue());
40 *reject = UnsafeJsCast<JsObject>(on_reject.ToJsValue());
46 LocalVar<JsFunction> ctor_obj = UnsafeJsCast<JsFunction>(ctor);
48 LocalVar<JsValue> ret;
49 LocalVar<JsValue> args[] = {
52 return UnsafeJsCast<JsObject>(ret);
61 : resolver_(NewPromiseResolver()),
62 promise_(GetPromise(resolver_.handle())) {}
83 promise_ = UnsafeJsCast<JsPromise>(value);
88 return promise_.value();
92 tracer->
Trace(&promise_);
94 tracer->
Trace(&resolve_);
95 tracer->
Trace(&reject_);
97 tracer->
Trace(&resolver_);
102 CHECK(CanResolve()) <<
"Can't reject JavaScript created Promises.";
103 #if defined(USING_V8) 104 (void)resolver_.handle()->Resolve(
GetIsolate()->GetCurrentContext(), value);
112 #elif defined(USING_JSC) 113 LocalVar<JsValue> except;
114 if (!
InvokeMethod(resolve_.handle(), Handle<JsObject>(), 1, &value,
122 CHECK(CanResolve()) <<
"Can't reject JavaScript created Promises.";
123 #if defined(USING_V8) 124 (void)resolver_.handle()->Reject(
GetIsolate()->GetCurrentContext(),
129 #elif defined(USING_JSC) 130 LocalVar<JsValue> except;
131 LocalVar<JsValue> rooted(error.
error());
132 if (!
InvokeMethod(reject_.handle(), Handle<JsObject>(), 1, &rooted,
140 std::function<
void(
Any)> on_reject) {
142 LocalVar<JsValue> member_val =
GetMemberRaw(promise_.handle(),
"then");
143 LocalVar<JsFunction> member = UnsafeJsCast<JsFunction>(member_val);
145 LocalVar<JsValue> except;
146 LocalVar<JsFunction> on_resolve_js =
148 LocalVar<JsFunction> on_reject_js =
150 LocalVar<JsValue> arguments[] = {
RawToJsValue(on_resolve_js),
152 CHECK(
InvokeMethod(member, promise_.handle(), 2, arguments, &except))
ReturnVal< JsFunction > CreateStaticFunction(const std::string &target, const std::string &name, Func &&callback)
Promise & operator=(const Promise &)
bool InvokeMethod(Handle< JsFunction > method, Handle< JsObject > that, int argc, LocalVar< JsValue > *argv, LocalVar< JsValue > *result_or_except)
void Trace(memory::HeapTracer *tracer) const override
void RejectWith(const js::JsError &error, bool run_events=true)
ReturnVal< JsValue > ToJsValue() const override
ReturnVal< JsValue > RawToJsValue(Handle< T > source)
void ResolveWith(Handle< JsValue > value, bool run_events=true)
void Trace(const Traceable *ptr)
ReturnVal< JsValue > error() const
proto::ValueType GetValueType(Handle< JsValue > value)
bool TryConvert(Handle< JsValue > value) override
void Then(std::function< void(Any)> on_resolve, std::function< void(Any)> on_reject)
std::string ConvertToString(Handle< JsValue > value)
JSContextRef GetContext()
void OnUncaughtException(JSValueRef exception, bool in_promise)
bool InvokeConstructor(Handle< JsFunction > ctor, int argc, LocalVar< JsValue > *argv, LocalVar< JsValue > *result_or_except)
v8::Isolate * GetIsolate()
ReturnVal< JsValue > GetMemberRaw(Handle< JsObject > object, const std::string &name, LocalVar< JsValue > *exception=nullptr)