It is possible to "await" for an array (or list) of promises in WebCore.... e.g. something like:
Procedure DoSomeTasks(Data : Array);
var
i : integer;
TaskResults : TJSValueDynArray;
Tasks : TJSPromiseArray;
begin
SetLength(Tasks,High(Data));
For i := 0 to High(Data) do Tasks[i] := SomeAsyncFunc(Data[i]);
TaskResults := await(TJSValueDynArray,(TJSPromise.all([Tasks]));
end;
An example of multiple await is here:
(from: pas2js AsyncAWait - Free Pascal wiki)
// Translated from https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
program tryfetchmany;
{$mode objfpc}
uses
browserconsole, JS, Web, SysUtils, Types;
function FetchBlob(url: string): TJSBlob; async;
var
response: TJSResponse;
begin
response := await(window.fetch(url));
if not response.ok then
raise Exception.create('HTTP error! status: '+str(response.status))
else
Result:=await(response.blob());
end;
function FetchText(url: string): string; async;
var
response: TJSResponse;
begin
response := await(window.fetch(url));
if not response.ok then
raise Exception.create('HTTP error! status: '+str(response.status))
else
Result:=await(response.text());
end;
procedure DisplayContent; async;
var
coffee, tea, description: TJSPromise;
objectURL1, objectURL2, descText: String;
values: TJSValueDynArray;
image1, image2: TJSHTMLImageElement;
para: TJSHTMLElement;
begin
try
coffee := FetchBlob('test1.png');
tea := FetchBlob('test1.png');
description := FetchText('description.txt');
values := await(TJSValueDynArray,TJSPromise.all([coffee, tea, description]));
objectURL1 := TJSURL.createObjectURL(values[0]);
objectURL2 := TJSURL.createObjectURL(values[1]);
descText := string(values[2]);
image1 := TJSHTMLImageElement(document.createElement('img'));
image2 := TJSHTMLImageElement(document.createElement('img'));
image1.src := objectURL1;
image2.src := objectURL2;
document.body.appendChild(image1);
document.body.appendChild(image2);
para := TJSHTMLElement(document.createElement('p'));
para.textContent := descText;
document.body.appendChild(para);
except
writeln(JSExceptValue);
end;
end;
begin
DisplayContent;
end.
system
(system)
Closed
4
This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.