pas2js/demo/asyncawait/trymany.lpr
2020-05-28 08:10:50 +00:00

68 lines
1.6 KiB
ObjectPascal

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('pas2js.png');
tea := FetchBlob('fpc.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.