main.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Javascript Async: Promise Homework
  2. // fetch basic
  3. fetch('https://swapi.dev/api/people/1/')
  4. .then((res) => res.json())
  5. .then((luke) => {
  6. basic(document.body, luke)
  7. });
  8. function basic(dom, json) {
  9. const table = document.createElement("table");
  10. dom.appendChild(table);
  11. for (let key in json) {
  12. const tr = document.createElement("tr")
  13. const td = document.createElement("td");
  14. tr.innerText = key;
  15. td.innerText = json[key];
  16. tr.appendChild(td);
  17. table.appendChild(tr)
  18. }
  19. }
  20. // myfetch
  21. myfetch('https://swapi.dev/api/people/1/')
  22. .then(luke => console.log(luke))
  23. function myfetch(url) {
  24. return new Promise(function (resolve, reject) {
  25. const xhr = new XMLHttpRequest();
  26. xhr.open('GET', url, true);
  27. xhr.onreadystatechange = function () {
  28. if (xhr.readyState != 4) {
  29. return;
  30. }
  31. if (xhr.status == 200) {
  32. resolve(JSON.parse(xhr.responseText));
  33. } else {
  34. reject('err')
  35. }
  36. }
  37. xhr.send();
  38. })
  39. }
  40. // race
  41. let mfetch = new Promise(() => {
  42. setTimeout(() => {
  43. fetch('https://swapi.dev/api/people/1/')
  44. .then(res => res.json())
  45. .then(luke => console.log(luke))
  46. }, Math.random() * 1000);
  47. });
  48. let delay = ms => new Promise(ok => setTimeout(() => ok(console.log('delay')), Math.random() * ms));
  49. await Promise.race([mfetch, delay(1000)]);