123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //fetch for first task
- let table = document.createElement("table")
- document.body.append(table)
- // fetch('https://swapi.dev/api/people/1/')
- // .then(res => res.json())
- // .then(luke => createTable(table, luke))
- //fetch for second task
- function fetchForTable(url) {
- fetch(url)
- .then(res => res.json())
- .then(luke => createTableImproved(newtable, luke))
- }
- let newtable = document.createElement("table")
- document.body.append(newtable)
- fetchForTable('https://swapi.dev/api/people/1/')
- //fetch basic
- function createTable(table, myJson) {
- table.innerHTML = ""
- for (let [keyJson, valueJson] of Object.entries(myJson)) {
- let tr = document.createElement('tr')
- //console.log(typeof storeValue)
- if (typeof valueJson === "object") {
- let thKey = document.createElement('th')
- thKey.innerHTML = `${keyJson}`
- tr.appendChild(thKey)
- for (let [key, value] of Object.entries(valueJson)) {
- let thValue = document.createElement('td')
- thValue.innerHTML = `${value}`
- tr.appendChild(thValue)
- }
- } else {
- let thKey2 = document.createElement('th')
- let thValue2 = document.createElement('td')
- thKey2.innerHTML = `${keyJson}`;
- thValue2.innerHTML = ` ${valueJson}`
- tr.appendChild(thKey2)
- tr.appendChild(thValue2)
- }
- table.append(tr)
- }
- }
- //fetch improved
- function createTableImproved(table, myJson) {
- const substring = 'https://swapi.dev/api/'
- for (let [keyJson, valueJson] of Object.entries(myJson)) {
- let tr = document.createElement('tr')
- if (typeof valueJson === "object") {
- let thKey = document.createElement('th')
- thKey.innerHTML = `${keyJson}`
- tr.appendChild(thKey)
- for (let [key, value] of Object.entries(valueJson)) {
- if (value.includes(substring)) {
- let btnValue = document.createElement('button')
- btnValue.style.color = 'red'
- btnValue.innerHTML = `<b> ${value}`
- btnValue.onclick = () => fetchForTable(value)
- tr.appendChild(btnValue)
- } else {
- let thValue = document.createElement('td')
- thValue.innerHTML = `${value}`
- tr.appendChild(thValue)
- }
- }
- } else if ((typeof valueJson === "string") && (valueJson.includes(substring))) {
- let thKey2 = document.createElement('th')
- thKey2.innerHTML = `${keyJson}`;
- let btnValue = document.createElement('a')
- btnValue.style.color = 'red'
- btnValue.innerHTML = `<b> ${valueJson}`
- btnValue.onclick = () => fetchForTable(valueJson)
- tr.appendChild(thKey2)
- tr.appendChild(btnValue)
- } else {
- let thKey2 = document.createElement('th')
- let thValue2 = document.createElement('td')
- thKey2.innerHTML = `${keyJson}`;
- thValue2.innerHTML = ` ${valueJson}`
- tr.appendChild(thKey2)
- tr.appendChild(thValue2)
- }
- table.append(tr)
- }
- }
- //1 вариант
- // function myfetch(url) {
- // return new Promise(function(resolve, reject) {
- // const xhr = new XMLHttpRequest();
- // xhr.open('GET', url, true);
- // xhr.send();
- // xhr.onreadystatechange =
- // function() {
- // try {
- // if (xhr.readyState != 4)
- // return;
- // if (xhr.status != 200) {
- // reject(new Error(`Ошибка ${xhr.status}: ${xhr.statusText}`))
- // } else {
- // resolve(JSON.parse(xhr.responseText));
- // }
- // } catch (err) { // для отлова ошибок используем конструкцию try...catch вместо onerror
- // reject(new Error('ERROR: Request failed' + `${err}`))
- // }
- // }
- // })
- // }
- // //2 вариант
- function myfetch(url) {
- return new Promise(function(resolve, reject) {
- const xhr = new XMLHttpRequest();
- xhr.open('GET', url, true);
- xhr.send();
- xhr.onreadystatechange = () => {
- if (xhr.readyState != 4)
- return;
- (xhr.status == 200) ?
- resolve(JSON.parse(xhr.responseText)):
- reject(new Error(`Ошибка ${xhr.status}: ${xhr.statusText}`))
- }
- xhr.onerror = () => reject(new Error('ERROR: Request failed'))
- })
- }
- // myfetch('https://swapi.dev/api/people/1/')
- // .then(luke => console.log(luke))
- //race
- const delay = ms => {
- return new Promise(resolve => setTimeout(() => resolve(), ms))
- }
- //delay(2000).then(() => console.log('after 2 sec'))
- // Promise.race([delay(10).then(() => console.log('after 10 ms')), myfetch('https://swapi.dev/api/people/1/')
- // .then(luke => console.log(luke))
- // ]).then(() => console.log('first promise'))
- console.log('start promises...')
- Promise.race([delay(1000).then(() => console.log('after 1 sec')), myfetch('https://swapi.dev/api/people/1/')
- .then(luke => console.log(luke))
- ]).then(() => console.log('first promise'))
- Promise.all([delay(2000).then(() => console.log('after 2 sec')), myfetch('https://swapi.dev/api/people/1/')
- .then(luke => console.log(luke))
- ]).then(() => console.log('all promises'))
|