checkWinner(id) {
console.log(typeof id)
console.log(id)
console.log(typeof{[id]: Math.max(...Object.values(this.state))})
console.log({[id]: Math.max(...Object.values(this.state))})
return this.setState(state => {
return JSON.stringify({
[id]: Math.max(...Object.values(state))
})
})
}
checkWinner(id) {
console.log(typeof id)
console.log(id)
console.log(typeof{[id]: Math.max(...Object.values(this.state))})
console.log({[id]: Math.max(...Object.values(this.state))})
return this.setState(state => {
return JSON.stringify({
[id.toString()]: Math.max(...Object.values(state))
})
})
}
function checkTicketsAvailable(data, time, numOfTicketBooked,number,food,format) {
console.log('Выбираем билет...');
return new Promise((resolve, reject) => {
setTimeout(() => {
const setsAvailable = seats[data][time].freeSeats.length;
if (setsAvailable >= numOfTicketBooked) {
resolve(setsAvailable);
} else {
reject(`Мест на ${data} в ${time} нет`)
}
},2000);
})
.then(() => {
console.log('Бронируем билеты...');
return new Promise((resolve, reject) => {
setTimeout(() => {
const checkFreeSeats = number.every((el) => seats[data][time].freeSeats.includes(el))
if (checkFreeSeats === true) {
resolve(checkFreeSeats)
} else {
reject(`На ${data} в ${time} места ${number} занято`)
}
},1500)
})
})
.then(() => {
console.log('Проверяем можно ли в зал с едой...');
return new Promise((resolve) => {
setTimeout(() => {
if (food === true) {
console.log(`Сеанс ${data} в ${time} с едой можно`);
} else {
console.log(`Сеанс ${data} в ${time} с едой к сожалению нельзя`);
}
resolve(food);
},3000)
})
})
.then(() => {
console.log('Выбираем формат фильма...');
return new Promise((resolve) => {
setTimeout(() => {
if (format === true) {
console.log(`Сеанс ${data} в ${time} будет в формате 3D`);
} else {
console.log(`Сеанс ${data} в ${time} будет в формате 2D`);
}
resolve(format);
},4000)
})
})
}
async function bookTickets(data, time, numOfTicketBooked,number,food,format) {
try {
const availableSeats = await checkTicketsAvailable(data, time, numOfTicketBooked,number,food,format);
console.log(`Вы забронировали на ${data}, ${numOfTicketBooked} билетов на ${time}, ваши места ${number}`)
} catch (error) {
console.log(error)
} finally {
console.log('Спасибо что выбрали наш кинотеатр !')
}
}
bookTickets('2023-02-17','15:00',3,['11', '21','50'],false,false);
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
чтобы все работало.