promise и async/await
в данный код.seatsAvailable
это количество свободных мест больше чемnumTicket
это количество билетов которые я забронировал) messageContainer.appendChild(textParagraph);
textParagraph.appendChild(response.message);
isMessageFromUser.appendChild(textParagraph);
textParagraph
message.appendChild(textParagraph)
import express from 'express';
import { Server } from 'socket.io'
const PORT = 3000;
const app = express();
const options = {
cors: true,
origin: ['http://localhost:3000'],
}
const server = app.listen(PORT, () => {
console.log('Сервер запустился!');
})
const io = new Server(server, options);
app.use(express.static('./dist'))
app.get('/', (req, res) => {
res.sendFile("index.html");
})
const messages = {}
io.on('connection', socket => {
socket.emit('добрый день', socket.id);
socket.join('room1');
socket.emit('messages', messages);
socket.on('message', message => {
io.to('room1').emit('receiveMessage', {
userId: socket.id,
message: message
})
})
socket.on('editMessage', (data) => {
if (messages[data.messageId]) {
message[data.messageId].message = data.message;
}
io.to('room1').emit('updateMessage', {
messageId: data.messageId,
message: messages[data.messageId]
});
})
socket.on('deleteMessage', messageId => {
delete messages[messageId];
io.to('room1').emit('removeMessage', messageId);
})
})
product_button
(Купить) при нажатие на которые появляются разные модальные окна product_congratulations
. Я это реализовал таким образом if (event.target.tagName === 'BUTTON') {
const currentParentDIV = document.querySelector('.wrapper_product').closest('.product');
console.log(currentParentDIV);
currentParentDIV.classList.toggle('active');
setTimeout(() => {
document.querySelectorAll('.active').forEach((activeEl) => {
activeEl.classList.remove('active')
})
},3000);
}
product_button
(Купить) родителю кнопки product
добавляется класс active
, следовательно если у родителя product
есть класс active
то должно появляться модальное окно product_congratulations
.product_congratulations
появляется только при нажатие на кнопку product_button
(Купить) которая находиться в карточки iPhone
, при нажатие на другие кнопки(Купить) в других карточках модальные окна не появляются.active
добавляется кнопки product_button
(Купить) а должен добавляться родителю кнопки product
active
на button
?product
или wrapper_product
чтобы все работало. { target: t }
а не event
. Это одно и тоже ?n.classList.toggle('active', n.contains(parent))
а именно n.contains(parent)
. Обычно в метод toggle
мы передаем только класс
. Можно ли данное выражение n.classList.toggle('active', n.contains(parent))
записать более проще и понятнее ? if (counter === 0) {
function moreHTML(title, number1, number2, number3) {
li.innerHTML = '<span class="title">Третий список</span>' +
'<ul class="extra-list">' +
'<li class="extra-item">9 элемент списка</li>' +
'<li class="extra-item">10 элемент списка</li>' +
'<li class="extra-item">11 элемент списка</li>' +
'</ul>'
}
}
function func(title,firstEl,secondEl,thirdEl) {
return li.innerHTML = '<span class="title">Третий список</span>' +
'<ul class="extra-list">' +
'<li class="extra-item">9 элемент списка</li>' +
'<li class="extra-item">10 элемент списка</li>' +
'<li class="extra-item">11 элемент списка</li>' +
'</ul>'
}
class Student {
constructor(firstName,lastName,yearOfBirth,arrayOfGrades) {
this.firstName = firstName;
this.lastName = lastName;
this.yearOfBirth = yearOfBirth;
this.arrayOfGrades = arrayOfGrades;
}
//______Возраст студента______//
getAge () {
return console.log(`${this.firstName}'s old is ${2023 - this.yearOfBirth} years`);
}
//______Средний бал______//
averageMark () {
let sum = 0;
for (let i = 0; i < this.arrayOfGrades.length; i++) {
sum = sum + this.arrayOfGrades[i];
}
return console.log(`${this.firstName}'s average mark is ${sum / this.arrayOfGrades.length}`);
}
}
//______Экземпляры студентов______//
const student = new Student('Dmitriy','Yaroshchuk',2001,[70,80,90,100,90,90,99,100,95,100]);
const student1 = new Student('Andrew','Kavetsky',2000,[90,90,90,90,90,90,100,100,95,93]);
const student2 = new Student('Diana','Koko',1999,[70,70,70,70,70,70,75,75,75,93]);
//______Проверка что arrayOfGrades является массивом_____//
// console.log(student.arrayOfGrades);
// console.log(typeof student.arrayOfGrades);
// console.log(Array.isArray(student.arrayOfGrades));
// const spreadArrayOfGrades = [...(student.arrayOfGrades)];
// const spreadArrayOfGrades1 = [...(student1.arrayOfGrades)];
// const spreadArrayOfGrades2 = [...(student2.arrayOfGrades)];
// console.log(spreadArrayOfGrades);
// console.log(spreadArrayOfGrades1);
// console.log(spreadArrayOfGrades2);
//______Вызываю методы______//
student.getAge();
student1.getAge();
student2.getAge();
student.averageMark();
student1.averageMark();
student2.averageMark();
class Visit extends Student {
constructor() {
super();
this.visitinMagazine = [];
}
//______Используется когда студент был на занятие______//
present () {
if (this.visitinMagazine.length < 26) {
this.visitinMagazine.push(true);
return this;
} else {
return this.visitinMagazine.pop();
}
}
//______Используется когда студент НЕ был на занятие______//
absent () {
if (this.visitinMagazine.length < 26) {
this.visitinMagazine.push(false);
return this;
} else {
return this.visitinMagazine.pop();
}
}
}
//______Экземпляры посейщения______//
const visit = new Visit();
const visit1 = new Visit();
const visit2 = new Visit();
//______Посейщение уроков______//
visit.present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().absent().absent();
const callOfVisitnMagazine = [...(visit.visitinMagazine)];
// console.log(callOfVisitnMagazine);
//______Посейщение уроков______//
visit1.absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().absent().present().present();
const callOfVisitnMagazine1 = [...(visit1.visitinMagazine)];
// console.log(callOfVisitnMagazine1);
//______Посейщение уроков______//
visit2.present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().present().absent().absent().absent();
const callOfVisitnMagazine2 = [...(visit2.visitinMagazine)];
// console.log(callOfVisitnMagazine2);
class Calculation extends Visit {
constructor(arrayOfGrades,visitinMagazine) {
super(arrayOfGrades,visitinMagazine);
}
//______Колличество занятий______//
amountOfClasses () {
return console.log(this.arrayOfGrades);
}
//______Колличество посищений______//
amountOfVisits () {
return console.log(this.visitinMagazine.filter((element) => element === true).length);
}
//______Проверяем среднюю оценку и посейщение______//
summary () {
const averageVisit = this.amountOfVisits / this.amountOfClasses;
if (this.averageMark > 90 && averageVisit > 0.9) {
return console.log('Cool!');
} else if (this.averageMark > 90 || averageVisit > 0.9) {
return console.log('Good, but it can be better!');
} else {
return console.log('Radish');
}
}
}
//______Экземпляры расчетов______//
const calculate = new Calculation([70,80,90,100,90,90,99,100,95,100],callOfVisitnMagazine);
const calculate1 = new Calculation([90,90,90,90,90,90,100,100,95,93],callOfVisitnMagazine1);
const calculate2 = new Calculation([70,70,70,70,70,70,75,75,75,93],callOfVisitnMagazine2);
calculate.amountOfClasses();
calculate1.amountOfClasses();
calculate2.amountOfClasses();
calculate.amountOfVisits();
calculate1.amountOfVisits();
calculate2.amountOfVisits();
calculate.summary();
calculate1.summary();
calculate2.summary();
arrayOfGrades