//fetch basic { function jsonTable (dom,json){ let table = document.createElement('table') table.border = "1" dom.append(table) for(let el in json){ let tr = document.createElement('tr') let td1 = document.createElement('td') let td2 = document.createElement('td') td1.innerText= el td2.innerText= json[el] table.append(tr) tr.append(td1,td2) } } fetch('https://swapi.dev/api/starships/12/') .then(res => res.json()) .then(luke =>jsonTable(document.body,luke)) } //fetch improved { function jsonTable (dom,json){ let table = document.createElement('table') table.border = "1" dom.append(table) for(let el in json){ let tr = document.createElement('tr') let td1 = document.createElement('td') let td2 = document.createElement('td') td1.innerText= el td2.innerText= json[el] table.append(tr) tr.append(td1,td2) function btn (link){ let button = document.createElement('button') button.innerText='info' button.onclick= function(){ fetch(link) .then(res => res.json()) .then(luke =>jsonTable(document.body,luke)) } td2.append(button) } if(Array.isArray(json[el])){ for(let elArr of json[el]){ if(elArr.indexOf("https://swapi.dev")!== -1){ btn(elArr) } } } if(json[el].indexOf("https://swapi.dev")!== -1){ btn(json[el]) } } } fetch('https://swapi.dev/api/starships/12/') .then(res => res.json()) .then(luke =>jsonTable(document.body,luke)) } //race { function delay(ms){ function executor(fulfill, reject){ setTimeout(() => fulfill(ms), ms) } return new Promise(executor) } let promise1 = fetch("https://swapi.dev/api/films/1/") .then(() => console.log(`promise ${Date.now()-startTimer} ms`)) let promise2 = delay(400) .then(() => console.log("delay")) let startTimer = Date.now() Promise.race([promise1, promise2]) .then(result => result) } //Promisify: confirm { function confirmPromise(text){ function executor(fulfill, reject) { if (confirm(text)){ fulfill() } else{reject()} } return new Promise(executor) } confirmPromise('Промисы это сложно?').then(() => console.log('не так уже и сложно'), () => console.log('respect за усидчивость и внимательность')) } //Promisify: prompt { function promptPromise(text){ function executor(fulfill, reject) { let name = prompt(text) if (name){ fulfill(name) } else{reject()} } return new Promise(executor) } promptPromise("Как тебя зовут?").then(name => console.log(`Тебя зовут ${name}`), () => console.log('Ну зачем морозиться, нормально же общались')) }