trymany.lpr 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. program tryfetchmany;
  2. {$mode objfpc}
  3. uses
  4. browserconsole, JS, Web, SysUtils, Types;
  5. function FetchBlob(url: string): TJSBlob; async;
  6. var
  7. response: TJSResponse;
  8. begin
  9. response := await(window.fetch(url));
  10. if not response.ok then
  11. raise Exception.create('HTTP error! status: '+str(response.status))
  12. else
  13. Result:=await(response.blob());
  14. end;
  15. function FetchText(url: string): string; async;
  16. var
  17. response: TJSResponse;
  18. begin
  19. response := await(window.fetch(url));
  20. if not response.ok then
  21. raise Exception.create('HTTP error! status: '+str(response.status))
  22. else
  23. Result:=await(response.text());
  24. end;
  25. procedure DisplayContent; async;
  26. var
  27. coffee, tea, description: TJSPromise;
  28. objectURL1, objectURL2, descText: String;
  29. values: TJSValueDynArray;
  30. image1, image2: TJSHTMLImageElement;
  31. para: TJSHTMLElement;
  32. begin
  33. try
  34. coffee := FetchBlob('pas2js.png');
  35. tea := FetchBlob('fpc.png');
  36. description := FetchText('description.txt');
  37. values := await(TJSValueDynArray,TJSPromise.all([coffee, tea, description]));
  38. objectURL1 := TJSURL.createObjectURL(values[0]);
  39. objectURL2 := TJSURL.createObjectURL(values[1]);
  40. descText := string(values[2]);
  41. image1 := TJSHTMLImageElement(document.createElement('img'));
  42. image2 := TJSHTMLImageElement(document.createElement('img'));
  43. image1.src := objectURL1;
  44. image2.src := objectURL2;
  45. document.body.appendChild(image1);
  46. document.body.appendChild(image2);
  47. para := TJSHTMLElement(document.createElement('p'));
  48. para.textContent := descText;
  49. document.body.appendChild(para);
  50. except
  51. writeln(JSExceptValue);
  52. end;
  53. end;
  54. begin
  55. DisplayContent;
  56. end.