//1. Chat async function jsonPost(url, data){ try { let response = await fetch(url, { method: 'POST', body: JSON.stringify(data) }) if (response.ok) { let json = await response.json() return json} } catch (error) { console.log('ошибка: ' + error) //ловим ошибки } } send.onclick = sendAndCheck async function sendAndCheck() { await sendMessage(userName.value, userMessage.value) getMessages (nextMessageId) } async function sendMessage(nick, message) { if (nick && message) { jsonPost("http://students.a-level.com.ua:10012", { func: 'addMessage', nick, message }) } } async function getMessages (id) { const res = await jsonPost("http://students.a-level.com.ua:10012", { func: "getMessages", messageId: id}).then(res => res) nextMessageId = res.nextMessageId for(const msg of res.data){ const chatBox = document.createElement('div') chat.prepend(chatBox) const chatName = document.createElement('div') chatBox.append(chatName) chatName.innerText = msg.nick + ': ' chatName.classList.add('name') const chatMessage = document.createElement('div') chatBox.append(chatMessage) chatMessage.innerText = msg.message chatMessage.classList.add('text') const time = document.createElement('div'); time.classList.add('time') const data = new Date(msg.timestamp) time.innerText = data.toLocaleDateString() + ' ' + data.toLocaleTimeString(); chatBox.append(time) } } let nextMessageId = 0 function delay(ms){ function executor(fulfill, reject){ setTimeout(() => fulfill(ms), ms) } return new Promise(executor) } async function checkLoop() { while(true) { getMessages (nextMessageId) await delay(2000) } } checkLoop() //2. SWAPI Links // Напишите промисифицированную функцию, которая принимать параметром ссылку на swapi.dev // (например, https://swapi.dev/api/people/20) и скачивать всю информацию по ссылке, включая вложенные ссылки. Все // ссылки внутри скачанного объекта должны заменяться на скачанные объекты. Полученный общий объект должен стать // результатом промиса, который возвращает функция. // Например, ссылка, приведенная выше позволяет информацию о Йода Мастере скачать: function fetchGet (url) { return fetch(url) .then((response) => { if (response.ok) { return response.json() } else { return Promise.reject(new Error(response.statusText)) } } ) } function swapiLinks (url) { let obj; return fetchGet(url) .then((response) => { console.log(response); obj = response; const linkPromises = []; Object.values(obj).forEach(value => { if (typeof value == 'string' && value.includes('https://swapi.dev/api/')) { linkPromises.push(fetchGet(value)); } else if (Array.isArray(value)) { value.forEach((el) => { if (typeof el == 'string' && el.includes('https://swapi.dev/api/')) { linkPromises.push(fetchGet(el)); } }) } }) return Promise.all(linkPromises) }).then(linkResponses => { Object.keys(obj).forEach(key => { if (typeof obj[key] == 'string' && obj[key].includes('https://swapi.dev/api/')) { obj[key] = linkResponses.shift(); } else if (Array.isArray(obj[key])) { obj[key].forEach((el, i) => { if (typeof el == 'string' && el.includes('https://swapi.dev/api/')) { obj[key][i] = linkResponses.shift(); } }); } }); return Promise.resolve(obj); }) .catch((error) => { return Promise.reject(error); }); } swapiLinks("https://swapi.dev/api/people/20/") .then(yodaWithLinks => { console.log(JSON.stringify(yodaWithLinks, null, 4)); }) .catch((error) => { console.log(error); }); //domEventPromise + // Реализуйте промисифицированную функцию, которая резолвит промис по событию в DOM: // Функция должна: // // используя addEventListener повесить свой обработчик события на DOM element событие eventName // по событию зарезолвить промис отдав в качестве результата объект события // убрать обработчик с DOM-элемента, используя removeEventListener. // // Убедитесь, что действительно убираете обработчик после резолва промиса. Он больше не нужен. function domEventPromise(element, eventName) { function executor (resolve) { let myEvent = event => { resolve(event); element.removeEventListener(eventName, myEvent) } element.addEventListener(eventName, myEvent) } return new Promise(executor) } let button = document.createElement('button') document.body.append(button) button.innerText = "Click" domEventPromise(button, 'click').then( e => console.log('event click happens', e))