index.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. fetchImprovedWrapp()
  2. function fetchImprovedWrapp() {
  3. fetch('https://swapi.dev/api/people/1/')
  4. .then(res => res.json())
  5. .then(
  6. luke => {
  7. console.log(luke)
  8. renderTable(wrapp, luke)
  9. }
  10. )
  11. function renderTable(element, json, backup=[]) {
  12. let backArr = backup
  13. element.innerHTML = ''
  14. const table = document.createElement('table')
  15. element.append(table)
  16. for (const [key, value] of Object.entries(json)) {
  17. const tr = document.createElement('tr')
  18. table.append(tr)
  19. const th = document.createElement('th')
  20. th.innerText = key
  21. tr.append(th)
  22. const td = document.createElement('td')
  23. function fillTD(string) {
  24. const re = /https:\/\/swapi.dev\/api\//
  25. // let strFromArr = value.join(' ')
  26. // console.log(strFromArr)
  27. // let reRes2 = strFromArr.match(re)
  28. // console.log(reRes2)
  29. // let reRes3 = re.exec(strFromArr)
  30. // console.log(reRes3)
  31. let reRes = re.test(string)
  32. if (reRes) {
  33. let newString = string.replace(re, '')
  34. const btn = document.createElement('button')
  35. btn.innerText = 'Перейти на ' + newString
  36. td.append(btn)
  37. btn.onclick = () => {
  38. fetch(string)
  39. .then(res => res.json())
  40. .then(obj => {
  41. console.log(obj)
  42. backArr.push(json)
  43. // console.log(backArr)
  44. renderTable(element, obj, backArr)
  45. })
  46. }
  47. } else {
  48. const span = document.createElement('span')
  49. span.innerText = value
  50. td.append(span)
  51. }
  52. }
  53. if (typeof value === 'object') {
  54. for (const el of value) {
  55. fillTD(el)
  56. }
  57. } else {
  58. fillTD(value)
  59. }
  60. tr.append(td)
  61. }
  62. const backBtn = document.createElement('button')
  63. backBtn.innerText = 'Назад'
  64. element.append(backBtn)
  65. backBtn.onclick = () => {
  66. let lastObj = backArr.pop()
  67. // console.log(backArr)
  68. if (lastObj) {
  69. renderTable(element, lastObj, backArr)
  70. }
  71. }
  72. }
  73. }
  74. // myFetchWrapp()
  75. function myFetchWrapp() {
  76. function myfetch(url){
  77. return new Promise(function (resolve, reject) {
  78. const xhr = new XMLHttpRequest()
  79. xhr.open('GET', url, true)
  80. xhr.onreadystatechange = function() { //обработчик изменения статуса запроса. Статус == 4 сигнализирует о том, что запрос окончен.
  81. if (xhr.readyState != 4){
  82. return
  83. }
  84. if (xhr.status == 200){
  85. resolve(JSON.parse(xhr.responseText))
  86. }
  87. else {
  88. reject(new Error('Ошибка ' + xhr.status + ', ' + xhr.statusText))
  89. }
  90. }
  91. xhr.send()
  92. })
  93. }
  94. // myfetch('https://swapi.dev/api/people/1/')
  95. // .then(luke => console.log(luke))
  96. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  97. Promise.race([myfetch('https://swapi.dev/api/people/1/'), delay(80)]).then((value) => {
  98. console.log(value)
  99. })
  100. }