mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-08-19 09:09:04 +02:00
wasmjob: added some IJSPromise members
This commit is contained in:
parent
32b763f134
commit
3bd145543d
@ -827,16 +827,59 @@ type
|
|||||||
class function Cast(Intf: IJSObject): IJSError; overload;
|
class function Cast(Intf: IJSObject): IJSError; overload;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
TJSPromiseResolver = function(const aValue: TJOB_JSValue): TJOB_JSValue of object;
|
||||||
|
TJSPromiseExecutor = procedure(const OnResolve, OnReject: TJSPromiseResolver) of object;
|
||||||
|
TJSPromiseFinallyHandler = procedure of object;
|
||||||
|
|
||||||
{ IJSPromise }
|
{ IJSPromise }
|
||||||
|
|
||||||
IJSPromise = interface(IJSObject)
|
IJSPromise = interface(IJSObject)
|
||||||
['{2BFE673B-B5D4-4F31-96CD-5E1A60EFBE26}']
|
['{2BFE673B-B5D4-4F31-96CD-5E1A60EFBE26}']
|
||||||
|
function all(arg: IJSArray): IJSPromise; overload;
|
||||||
|
function all(arg: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function allSettled(arg: IJSArray): IJSPromise; overload;
|
||||||
|
function allSettled(arg: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function race(arg: IJSArray): IJSPromise; overload;
|
||||||
|
function race(arg: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function reject(const reason: UnicodeString): IJSPromise; overload;
|
||||||
|
function reject(reason: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function resolve(const value: boolean): IJSPromise; overload;
|
||||||
|
function resolve(const value: longint): IJSPromise; overload;
|
||||||
|
function resolve(const value: double): IJSPromise; overload;
|
||||||
|
function resolve(const value: IJSObject): IJSPromise; overload;
|
||||||
|
function resolve(const value: UnicodeString): IJSPromise; overload;
|
||||||
|
function resolve(value: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function resolve: IJSPromise; overload;
|
||||||
|
function _then (const OnAccepted: TJSPromiseResolver): IJSPromise; overload;
|
||||||
|
function _then (const OnAccepted, OnRejected: TJSPromiseResolver) : IJSPromise; overload;
|
||||||
|
function catch (const OnRejected: TJSPromiseResolver): IJSPromise; overload;
|
||||||
|
function _finally(const Handler: TJSPromiseFinallyHandler): IJSPromise; overload;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TJSPromise }
|
{ TJSPromise }
|
||||||
|
|
||||||
TJSPromise = class(TJSObject,IJSPromise)
|
TJSPromise = class(TJSObject,IJSPromise)
|
||||||
public
|
public
|
||||||
|
//class function Create(const Executor: TJSPromiseExecutor): IJSPromise; overload;
|
||||||
|
function all(arg: IJSArray): IJSPromise; overload;
|
||||||
|
function all(arg: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function allSettled(arg: IJSArray): IJSPromise; overload;
|
||||||
|
function allSettled(arg: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function race(arg: IJSArray): IJSPromise; overload;
|
||||||
|
function race(arg: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function reject(const reason: UnicodeString): IJSPromise; overload;
|
||||||
|
function reject(reason: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function resolve(const value: boolean): IJSPromise; overload;
|
||||||
|
function resolve(const value: longint): IJSPromise; overload;
|
||||||
|
function resolve(const value: double): IJSPromise; overload;
|
||||||
|
function resolve(const value: IJSObject): IJSPromise; overload;
|
||||||
|
function resolve(const value: UnicodeString): IJSPromise; overload;
|
||||||
|
function resolve(value: TJOB_JSValue): IJSPromise; overload;
|
||||||
|
function resolve: IJSPromise; overload;
|
||||||
|
function _then (const OnAccepted: TJSPromiseResolver): IJSPromise; overload;
|
||||||
|
function _then (const OnAccepted, OnRejected: TJSPromiseResolver) : IJSPromise; overload;
|
||||||
|
function catch (const OnRejected: TJSPromiseResolver): IJSPromise; overload;
|
||||||
|
function _finally(const Handler: TJSPromiseFinallyHandler): IJSPromise; overload;
|
||||||
class function Cast(Intf: IJSObject): IJSPromise; overload;
|
class function Cast(Intf: IJSObject): IJSPromise; overload;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1098,6 +1141,24 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function JOBCallTJSPromiseResolver(const aMethod: TMethod; var H: TJOBCallbackHelper): PByte;
|
||||||
|
var
|
||||||
|
aValue: TJOB_JSValue;
|
||||||
|
begin
|
||||||
|
aValue:=H.GetValue;
|
||||||
|
try
|
||||||
|
Result:=H.AllocJSValue(TJSPromiseResolver(aMethod)(aValue));
|
||||||
|
finally
|
||||||
|
aValue.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function JOBCallTJSPromiseFinallyHandler(const aMethod: TMethod; var H: TJOBCallbackHelper): PByte;
|
||||||
|
begin
|
||||||
|
Result:=H.AllocUndefined;
|
||||||
|
TJSPromiseFinallyHandler(aMethod)();
|
||||||
|
end;
|
||||||
|
|
||||||
{ TJSTextEncoder }
|
{ TJSTextEncoder }
|
||||||
|
|
||||||
class function TJSTextEncoder.Cast(Intf: IJSObject): IJSTextEncoder;
|
class function TJSTextEncoder.Cast(Intf: IJSObject): IJSTextEncoder;
|
||||||
@ -1114,6 +1175,133 @@ end;
|
|||||||
|
|
||||||
{ TJSPromise }
|
{ TJSPromise }
|
||||||
|
|
||||||
|
function TJSPromise.all(arg: IJSArray): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('all',[arg],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.all(arg: TJOB_JSValue): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('all',[arg],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.allSettled(arg: IJSArray): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('allSettled',[arg],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.allSettled(arg: TJOB_JSValue): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('allSettled',[arg],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.race(arg: IJSArray): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('race',[arg],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.race(arg: TJOB_JSValue): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('race',[arg],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.reject(const reason: UnicodeString): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('reject',[reason],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.reject(reason: TJOB_JSValue): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('reject',[reason],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve(const value: boolean): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[value],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve(const value: longint): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[value],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve(const value: double): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[value],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve(const value: IJSObject): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[value],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve(const value: UnicodeString): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[value],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve(value: TJOB_JSValue): IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[value],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.resolve: IJSPromise;
|
||||||
|
begin
|
||||||
|
Result:=InvokeJSObjectResult('resolve',[],TJSPromise) as IJSPromise;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise._then(const OnAccepted: TJSPromiseResolver): IJSPromise;
|
||||||
|
var
|
||||||
|
m: TJOB_Method;
|
||||||
|
begin
|
||||||
|
m:=TJOB_Method.Create(TMethod(onAccepted),@JOBCallTJSPromiseResolver);
|
||||||
|
try
|
||||||
|
Result:=InvokeJSObjectResult('then',[m],TJSPromise) as IJSPromise;
|
||||||
|
finally
|
||||||
|
m.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise._then(const OnAccepted, OnRejected: TJSPromiseResolver
|
||||||
|
): IJSPromise;
|
||||||
|
var
|
||||||
|
ma, mr: TJOB_Method;
|
||||||
|
begin
|
||||||
|
ma:=TJOB_Method.Create(TMethod(OnAccepted),@JOBCallTJSPromiseResolver);
|
||||||
|
mr:=TJOB_Method.Create(TMethod(OnRejected),@JOBCallTJSPromiseResolver);
|
||||||
|
try
|
||||||
|
Result:=InvokeJSObjectResult('then',[ma,mr],TJSPromise) as IJSPromise;
|
||||||
|
finally
|
||||||
|
mr.Free;
|
||||||
|
ma.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise.catch(const OnRejected: TJSPromiseResolver): IJSPromise;
|
||||||
|
var
|
||||||
|
m: TJOB_Method;
|
||||||
|
begin
|
||||||
|
m:=TJOB_Method.Create(TMethod(OnRejected),@JOBCallTJSPromiseResolver);
|
||||||
|
try
|
||||||
|
Result:=InvokeJSObjectResult('catch',[m],TJSPromise) as IJSPromise;
|
||||||
|
finally
|
||||||
|
m.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TJSPromise._finally(const Handler: TJSPromiseFinallyHandler
|
||||||
|
): IJSPromise;
|
||||||
|
var
|
||||||
|
m: TJOB_Method;
|
||||||
|
begin
|
||||||
|
m:=TJOB_Method.Create(TMethod(Handler),@JOBCallTJSPromiseFinallyHandler);
|
||||||
|
try
|
||||||
|
Result:=InvokeJSObjectResult('finally',[m],TJSPromise) as IJSPromise;
|
||||||
|
finally
|
||||||
|
m.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
class function TJSPromise.Cast(Intf: IJSObject): IJSPromise;
|
class function TJSPromise.Cast(Intf: IJSObject): IJSPromise;
|
||||||
begin
|
begin
|
||||||
Result:=TJSPromise.Cast(Intf);
|
Result:=TJSPromise.Cast(Intf);
|
||||||
|
Loading…
Reference in New Issue
Block a user