// jsonPost с fetch и async async function jsonPost(url, data) { let response = await fetch(url, { method: 'POST', body: JSON.stringify(data), }) if (response.status == 200) { return response.json() } else if (response.status != 200) { return new Error('status is not 200') } } // function jsonPost(url, data) // { // return new Promise((resolve, reject) => { // var x = new XMLHttpRequest(); // x.onerror = () => reject(new Error('jsonPost failed')) // //x.setRequestHeader('Content-Type', 'application/json'); // x.open("POST", url, true); // x.send(JSON.stringify(data)) // x.onreadystatechange = () => { // if (x.readyState == XMLHttpRequest.DONE && x.status == 200){ // resolve(JSON.parse(x.responseText)) // } // else if (x.status != 200){ // reject(new Error('status is not 200')) // } // } // }) // } function addMessage(messageObj) { message = messageTemplate.content.cloneNode(true) message.querySelector('.nickname').textContent = messageObj.nick message.querySelector('.message-text').textContent = messageObj.message message.querySelector('.time').textContent = (new Date(messageObj.timestamp)).toString().slice(4, 24) messagesArea.append(message) } //отэто всё на then // send.onclick = () => { // if(nickname.value !== '' && messageText.value !== '') // jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: nickname.value, message: messageText.value}) // .then(() => { // nickname.value = '' // messageText.value = '' // }) // } // let savedId // jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: 0}) // .then(({data, nextMessageId}) => { // savedId = nextMessageId // for (let message of data) { // addMessage(message) // } // }) // setInterval(() => { // console.log(savedId) // jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: savedId}) // .then(({data, nextMessageId}) => { // savedId = nextMessageId // if (data.length > 0) { // for (let message of data) { // addMessage(message) // } // } // }) // }, 5000) //отэто всё с async let delay = (ms) => new Promise((fulfill) => setTimeout(() => fulfill(ms), ms)) async function sendMessage(nick, message) { if(nick !== '' && message !== '') { await jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick, message}) } } async function getMessages(messageId) { let {data, nextMessageId} = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId}) for (let message of data) addMessage(message) savedId = nextMessageId } async function sendAndCheck() { await sendMessage(nickname.value, messageText.value) messageText.value = '' await getMessages(savedId) } async function checkLoop() { while (true) { await delay(5000) await getMessages(savedId) } } let savedId = 0 getMessages(savedId) send.onclick = sendAndCheck checkLoop()