main.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. //fetch basic
  2. /*
  3. {
  4. function jsonInTable (parent, data){
  5. let table = document.createElement('table')
  6. table.border = "1px"
  7. for(key in data){
  8. let tr = document.createElement('tr')
  9. table.append(tr)
  10. let td = document.createElement('td')
  11. tr.append(td)
  12. td.innerText = [key]
  13. let td2 = document.createElement('td')
  14. tr.append(td2)
  15. td2.innerText = data[key]
  16. }
  17. parent.append(table)
  18. }
  19. fetch('https://swapi.dev/api/people/1/')
  20. .then(res => res.json())
  21. .then( data => jsonInTable(content, data))
  22. }
  23. //fetch improved
  24. {
  25. {
  26. function jsonInTable (parent, data){
  27. let table = document.createElement('table')
  28. table.border = "1px"
  29. for(let key in data){
  30. let tr = document.createElement('tr')
  31. table.append(tr)
  32. let td = document.createElement('td')
  33. tr.append(td)
  34. td.innerText = [key]
  35. let td2 = document.createElement('td')
  36. tr.append(td2)
  37. td2.innerText = data[key]
  38. function buton(url) {
  39. let button = document.createElement('button')
  40. button.innerText = 'text'
  41. button.onclick = () => {
  42. fetch(url)
  43. .then(res=>res.json())
  44. .then(info => jsonInTable(content, info))
  45. }
  46. td2.append(button)
  47. }
  48. if(Array.isArray(data[key])){
  49. for(elemOfArr of data[key]){
  50. if(elemOfArr.startsWith("https://swapi.dev") ){
  51. buton(elemOfArr)
  52. }
  53. }
  54. }
  55. if(typeof(data[key]) === "string" && data[key].indexOf("https://swapi.dev") !== -1 ){
  56. buton(data[key])
  57. }
  58. }
  59. parent.append(table)
  60. }
  61. fetch('https://swapi.dev/api/people/1/')
  62. .then(res => res.json())
  63. .then( data => jsonInTable(content, data))
  64. }
  65. }
  66. // Promise.race
  67. {
  68. function delay(ms){ //промисифицированная функция для создания промиса, который резолвится через определенное время
  69. //функция-исполнитель, принимает два параметра - функции для передачи промису результата работы
  70. function executor(fulfill,reject){ //reject объявлен для вида.
  71. setTimeout(() => fulfill(ms), ms) //setTimeout запустит функцию, которая запустит fulfill через ms миллисекунд. Результатом промиса будет время задержки
  72. }
  73. //возврщаем новый промис, передав в него executor. Промис тут же его запускает, передав в него колбэки для управления состоянием
  74. return new Promise(executor)
  75. }
  76. const p1 = delay(Math.random()*1000).then(result => "DelayFetch")
  77. const p2 = fetch('https://swapi.dev/api/people/1/')
  78. .then(result => 'Myfetch')
  79. let date = new Date()
  80. Promise.race([p1,p2]).then(value => console.log(value , new Date() - date))
  81. }
  82. //Promisify: confirm
  83. {
  84. function confirmPromise(text){
  85. function executor (fulfill,reject){
  86. if(confirm(text)){
  87. fulfill()
  88. }
  89. else {
  90. reject()
  91. }
  92. }
  93. return new Promise(executor)
  94. }
  95. confirmPromise('Промисы это сложно?').then(() => console.log('не так уже и сложно'),
  96. () => console.log('respect за усидчивость и внимательность'))
  97. }
  98. */
  99. //Promisify: prompt
  100. {
  101. function promptPromise(text){
  102. function executor (fulfill,reject){
  103. let answer = prompt(text)
  104. if(answer){
  105. fulfill(answer)
  106. }
  107. else {
  108. reject()
  109. }
  110. }
  111. return new Promise(executor)
  112. }
  113. promptPromise("Как тебя зовут?").then(name => console.log(`Тебя зовут ${name}`),
  114. () => console.log('Ну зачем морозиться, нормально же общались'))
  115. }