1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- program demoall;
- {$mode objfpc}
- uses
- JS, web, browserconsole;
- Procedure demo;
- procedure DoTimeout(resolve, reject: TJSPromiseResolver);
- Procedure DoCallResolve;
- begin
- Resolve('foo');
- end;
- begin
- window.setTimeOut(@DoCallResolve,100);
- end;
- function ShowResult(aValue: JSValue): JSValue;
- Var
- I : Integer;
- A : TJSArray;
- begin
- A:=TJSArray(aValue);
- For I:=0 to A.Length-1 do
- Writeln(A[i]);
- end;
- var
- p1,p2,p3 : JSValue;
- begin
- p1:=TJSPromise.resolve(3);
- p2:=1337;
- p3:=TJSPromise.New(@DoTimeout);
- TJSPromise.all([p1, p2, p3])._then(@ShowResult);
- end;
- Procedure Demo2;
- var
- p1,p2,p3 : TJSPromise;
- Procedure LogAll;
- begin
- writeln(p1);
- writeln(p2);
- writeln(p3);
- end;
- begin
- // this will be counted as if the iterable passed is empty, so it gets fulfilled
- p1 :=TJSPromise.all([1,2,3]);
- // this will be counted as if the iterable passed contains only the resolved promise with value "444", so it gets fulfilled
- p2 := TJSPromise.all([1,2,3, TJSPromise.resolve(444)]);
- // this will be counted as if the iterable passed contains only the rejected promise with value "555", so it gets rejected
- p3 := TJSPromise.all([1,2,3, TJSPromise.reject(555)]);
- // using setTimeout we can execute code after the stack is empty
- window.setTimeout(@LogAll);
- end;
- Procedure Demo3;
- var
- resolvedPromisesArray : TJSPromiseArray;
- p : TJSPromise;
- Procedure doLog;
- begin
- console.log('the stack is now empty');
- console.log(p);
- end;
- begin
- // we are passing as argument an array of promises that are already resolved,
- // to trigger Promise.all as soon as possible
- SetLength(resolvedPromisesArray,2);
- resolvedPromisesArray[0]:=TJSPromise.resolve(33);
- resolvedPromisesArray[1]:=TJSPromise.resolve(44);
- p:=TJSPromise.all(resolvedPromisesArray);
- // immediately logging the value of p
- console.log(p);
- // using setTimeout we can execute code after the stack is empty
- window.setTimeout(@DoLog);
- end;
- begin
- Demo;
- Demo2;
- Demo3;
- end.
|