promisedemo.lpr 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. library promisedemo;
  2. {$mode objfpc}
  3. {$h+}
  4. uses nothreads, sysutils, job.js, variants;
  5. Type
  6. TApp = Class(TObject)
  7. function DoResolve(const aValue: Variant): Variant;
  8. procedure DoPromiseExecutor(const OnResolve, OnReject:TJSPromiseResolver);
  9. function ResolveTest: TJSPromise;
  10. procedure Run;
  11. end;
  12. function TApp.DoResolve(const aValue: Variant): Variant;
  13. begin
  14. Writeln('Wasm: in DoResolve: success. Argument vartype: ', vartype(aValue));
  15. if vartype(aValue)=varOleStr then
  16. Writeln('Wasm: DoResolve received value: ', VarToStr(aValue));
  17. result:=unassigned;
  18. end;
  19. procedure TApp.DoPromiseExecutor(const OnResolve, OnReject: TJSPromiseResolver);
  20. begin
  21. Writeln('Wasm: in promise executor');
  22. if not Assigned(OnResolve) then
  23. Writeln('Wasm ERROR: no resolve callback');
  24. if not Assigned(OnReject) then
  25. Writeln('Wasm ERROR: no reject callback');
  26. if Assigned(OnResolve) then
  27. OnResolve('This is a success value');
  28. end;
  29. function TApp.ResolveTest: TJSPromise;
  30. begin
  31. Result:=TJSPromise.Create(@DoPromiseExecutor);
  32. end;
  33. procedure TApp.Run;
  34. Var
  35. P : TJSPromise;
  36. begin
  37. try
  38. P:=ResolveTest;
  39. P._then(@DoResolve);
  40. except
  41. on E: Exception do
  42. Writeln(e.Message);
  43. end;
  44. end;
  45. var
  46. App : TApp;
  47. begin
  48. App:=TApp.Create;
  49. App.Run;
  50. end.