manualpromise.lpr 836 B

12345678910111213141516171819202122232425262728293031323334
  1. Program manualpromise;
  2. uses browserconsole, JS, Web;
  3. function ResolveAfter2Seconds: TJSPromise;
  4. // returns immediately with a Promise,
  5. // which after 2 seconds gets resolved
  6. begin
  7. Result:=TJSPromise.new(procedure(resolve, reject : TJSPromiseResolver)
  8. begin
  9. window.setTimeout(procedure
  10. begin
  11. resolve('resolved');
  12. end,
  13. 2000); // wait 2 seconds
  14. end);
  15. end;
  16. procedure AsyncCall; async;
  17. var s: string;
  18. begin
  19. writeln('calling');
  20. s := await(string,resolveAfter2Seconds());
  21. // the await pauses this procedure returning to the caller
  22. // when the Promise from resolveAfter2Seconds gets resolved
  23. // this procedure is continued
  24. writeln(s); // expected output: 'resolved'
  25. end;
  26. begin
  27. AsyncCall;
  28. // calling AsyncCall returns immediately, while the Promise is waiting
  29. writeln('called');
  30. end.