demoall.lpr 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. program demoall;
  2. {$mode objfpc}
  3. uses
  4. JS, web, browserconsole;
  5. Procedure demo;
  6. procedure DoTimeout(resolve, reject: TJSPromiseResolver);
  7. Procedure DoCallResolve;
  8. begin
  9. Resolve('foo');
  10. end;
  11. begin
  12. window.setTimeOut(@DoCallResolve,100);
  13. end;
  14. function ShowResult(aValue: JSValue): JSValue;
  15. Var
  16. I : Integer;
  17. A : TJSArray;
  18. begin
  19. A:=TJSArray(aValue);
  20. For I:=0 to A.Length-1 do
  21. Writeln(A[i]);
  22. end;
  23. var
  24. p1,p2,p3 : JSValue;
  25. begin
  26. p1:=TJSPromise.resolve(3);
  27. p2:=1337;
  28. p3:=TJSPromise.New(@DoTimeout);
  29. TJSPromise.all([p1, p2, p3])._then(@ShowResult);
  30. end;
  31. Procedure Demo2;
  32. var
  33. p1,p2,p3 : TJSPromise;
  34. Procedure LogAll;
  35. begin
  36. writeln(p1);
  37. writeln(p2);
  38. writeln(p3);
  39. end;
  40. begin
  41. // this will be counted as if the iterable passed is empty, so it gets fulfilled
  42. p1 :=TJSPromise.all([1,2,3]);
  43. // this will be counted as if the iterable passed contains only the resolved promise with value "444", so it gets fulfilled
  44. p2 := TJSPromise.all([1,2,3, TJSPromise.resolve(444)]);
  45. // this will be counted as if the iterable passed contains only the rejected promise with value "555", so it gets rejected
  46. p3 := TJSPromise.all([1,2,3, TJSPromise.reject(555)]);
  47. // using setTimeout we can execute code after the stack is empty
  48. window.setTimeout(@LogAll);
  49. end;
  50. Procedure Demo3;
  51. var
  52. resolvedPromisesArray : TJSPromiseArray;
  53. p : TJSPromise;
  54. Procedure doLog;
  55. begin
  56. console.log('the stack is now empty');
  57. console.log(p);
  58. end;
  59. begin
  60. // we are passing as argument an array of promises that are already resolved,
  61. // to trigger Promise.all as soon as possible
  62. SetLength(resolvedPromisesArray,2);
  63. resolvedPromisesArray[0]:=TJSPromise.resolve(33);
  64. resolvedPromisesArray[1]:=TJSPromise.resolve(44);
  65. p:=TJSPromise.all(resolvedPromisesArray);
  66. // immediately logging the value of p
  67. console.log(p);
  68. // using setTimeout we can execute code after the stack is empty
  69. window.setTimeout(@DoLog);
  70. end;
  71. begin
  72. Demo;
  73. Demo2;
  74. Demo3;
  75. end.