Browse Source

* Generic version of Promise

Michaël Van Canneyt 3 years ago
parent
commit
7cdbf0966b
1 changed files with 30 additions and 0 deletions
  1. 30 0
      packages/rtl/js.pas

+ 30 - 0
packages/rtl/js.pas

@@ -849,6 +849,36 @@ type
     function _finally(value : TJSPromiseFinallyHandler): TJSPromise; external name 'finally';
   end;
 
+  generic TGPromise<T> = class external name 'Promise'
+  Type
+    TResolve = reference to function (aValue : T) : JSValue;
+    TReject = reference to function (aValue : JSValue) : JSValue;
+    TExecute = reference to procedure (resolve: TResolve; reject : TReject);
+    TFinallyHandler = reference to procedure;
+  Public
+    constructor new(Executor : TExecute);
+    function then_ (onAccepted : TResolve) : TJSPromise; external name 'then';
+    function then_ (onAccepted : TResolve; onRejected : TReject) : TJSPromise; external name 'then';
+    function finally_(value : TFinallyHandler): TJSPromise; external name 'finally';
+    function catch (onRejected : TReject) : TJSPromise;
+  end;
+
+  generic TGPromiseEx<T,E> = class external name 'Promise'
+  Type
+    TResolve = reference to function (aValue : T) : JSValue;
+    TReject = reference to function (aValue : E) : JSValue;
+    TExecute = reference to procedure (resolve: TResolve; reject : TReject);
+    TFinallyHandler = reference to procedure;
+  Public
+    constructor new(Executor : TExecute);
+    function then_ (onAccepted : TResolve) : TJSPromise; external name 'then';
+    function then_ (onAccepted : TResolve; onRejected : TReject) : TJSPromise; external name 'then';
+    function catch (onRejected : TReject) : TJSPromise;
+    function finally_(value : TFinallyHandler): TJSPromise; external name 'finally';
+  end;
+
+
+
 
   TJSFunctionArguments = class external name 'arguments'
   private