123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- // ДЗ : Async, Await. Параллельность и Последовательность
- // задание 1 Chat
- {
- let nextMessageId = 0;
- // Отправляет сообщение в чат
- async function sendMessage(nick, message) {
- const data = {
- func: 'addMessage',
- nick: nick,
- message: message,
- nextMessageId: nextMessageId,
- };
- const response = await jsonPost('http://students.a-level.com.ua:10012', data);
- nextMessageId = response.nextMessageId;
- return response;
- }
- // Читает все сообщения из чата и отображает их в контейнере
- async function readMessages() {
- const data = {
- func: 'getMessages',
- nextMessageId: nextMessageId,
- };
- const response = await jsonPost('http://students.a-level.com.ua:10012', data);
- nextMessageId = response.nextMessageId;
- const messages = response.messages;
- const container = document.getElementById('chat-container');
- for (const message of messages) {
- const messageNode = document.createElement('div');
- messageNode.innerHTML = `<b>${message.nick}</b>: ${message.message}`;
- container.appendChild(messageNode);
- }
- }
- // Читает только новые сообщения из чата
- async function readNewMessages() {
- const data = {
- func: 'getMessages',
- nextMessageId: nextMessageId,
- };
- const response = await jsonPost('http://students.a-level.com.ua:10012', data);
- nextMessageId = response.nextMessageId;
- const newMessages = response.messages;
- // обрабатывает новые сообщения
- }
- // Периодически проверяет наличие новых сообщений
- setInterval(readNewMessages, 5000);
- }
- // или (не уверен какой из вариантов правильный)
- {
- const serverUrl = 'http://students.a-level.com.ua:10012';
- let nextMessageId = 0;
- // Отправляет сообщение в чат
- async function sendMessage(nick, message) {
- const data = {
- nick: nick,
- message: message,
- nextMessageId: nextMessageId,
- };
- const response = await jsonPost(serverUrl, data);
- nextMessageId = response.nextMessageId;
- return response;
- }
- // Читает все сообщения из чата и отображает их в контейнере
- async function readMessages() {
- const response = await jsonPost(serverUrl, { nextMessageId: nextMessageId });
- nextMessageId = response.nextMessageId;
- const messages = response.messages;
- const container = document.getElementById('chat-container');
- for (const message of messages) {
- const messageNode = document.createElement('div');
- messageNode.innerHTML = `<b>${message.nick}</b>: ${message.message}`;
- container.appendChild(messageNode);
- }
- }
- // Читает только новые сообщения из чата
- async function readNewMessages() {
- const response = await jsonPost(serverUrl, { nextMessageId: nextMessageId });
- nextMessageId = response.nextMessageId;
- const newMessages = response.messages;
- // обрабатывает новые сообщения
- }
- // Периодически проверяет наличие новых сообщений
- setInterval(readNewMessages, 5000);
- // Отправка сообщения асинхронно
- async function sendMessageAsync(nick, message) {
- const send = await sendMessage(nick, message);
- const read = await readNewMessages();
- return { send, read };
- }
- }
- // задание 2 SWAPI Links
- {
- async function swapiLinks(url) {
- const response = await fetch(url);
- const data = await response.json();
- const promises = [];
- for (let key in data) {
- if (typeof data[key] === 'string' && data[key].startsWith('http')) {
- promises.push(swapiLinks(data[key]));
- }
- if (Array.isArray(data[key])) {
- for (let item of data[key]) {
- if (typeof item === 'string' && item.startsWith('http')) {
- promises.push(swapiLinks(item));
- }
- }
- }
- }
- const resolvedLinks = await Promise.all(promises);
- for (let key in data) {
- if (typeof data[key] === 'string' && data[key].startsWith('http')) {
- data[key] = resolvedLinks.shift();
- }
- if (Array.isArray(data[key])) {
- for (let i = 0; i < data[key].length; i++) {
- if (typeof data[key][i] === 'string' && data[key][i].startsWith('http')) {
- data[key][i] = resolvedLinks.shift();
- }
- }
- }
- }
- return data;
- }
- swapiLinks('https://swapi.dev/api/people/20/');
- const swapiLinks = async (url) => {
- const response = await fetch(url);
- const data = await response.json();
- const promises = [];
- const replaceLinks = (obj) => {
- Object.keys(obj).forEach((key) => {
- if (Array.isArray(obj[key])) {
- obj[key] = obj[key].map(replaceLinks);
- } else if (typeof obj[key] === 'object' && obj[key] !== null) {
- replaceLinks(obj[key]);
- } else if (typeof obj[key] === 'string' && obj[key].startsWith('https://swapi.dev/api/')) {
- promises.push(
- fetch(obj[key])
- .then((res) => res.json())
- .then((json) => (obj[key] = json)),
- );
- }
- });
- };
- replaceLinks(data);
- await Promise.all(promises);
- return data;
- };
- swapiLinks('https://swapi.dev/api/people/20/').then((yodaWithLinks) =>
- console.log(JSON.stringify(yodaWithLinks, null, 4)),
- );
- }
- // задание 3 domEventPromise
- {
- function domEventPromise(element, eventName) {
- return new Promise((resolve) => {
- function eventHandler(event) {
- resolve(event);
- element.removeEventListener(eventName, eventHandler);
- }
- element.addEventListener(eventName, eventHandler);
- });
- }
- const button = document.querySelector('button');
- domEventPromise(button, 'click').then((event) => console.log('event click happens', event));
- }
|