main.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // jsonPost с fetch и async
  2. async function jsonPost(url, data) {
  3. let response = await fetch(url, {
  4. method: 'POST',
  5. body: JSON.stringify(data),
  6. })
  7. if (response.status == 200) {
  8. return response.json()
  9. } else if (response.status != 200) {
  10. return new Error('status is not 200')
  11. }
  12. }
  13. // function jsonPost(url, data)
  14. // {
  15. // return new Promise((resolve, reject) => {
  16. // var x = new XMLHttpRequest();
  17. // x.onerror = () => reject(new Error('jsonPost failed'))
  18. // //x.setRequestHeader('Content-Type', 'application/json');
  19. // x.open("POST", url, true);
  20. // x.send(JSON.stringify(data))
  21. // x.onreadystatechange = () => {
  22. // if (x.readyState == XMLHttpRequest.DONE && x.status == 200){
  23. // resolve(JSON.parse(x.responseText))
  24. // }
  25. // else if (x.status != 200){
  26. // reject(new Error('status is not 200'))
  27. // }
  28. // }
  29. // })
  30. // }
  31. function addMessage(messageObj) {
  32. message = messageTemplate.content.cloneNode(true)
  33. message.querySelector('.nickname').textContent = messageObj.nick
  34. message.querySelector('.message-text').textContent = messageObj.message
  35. message.querySelector('.time').textContent = (new Date(messageObj.timestamp)).toString().slice(4, 24)
  36. messagesArea.append(message)
  37. }
  38. //отэто всё на then
  39. // send.onclick = () => {
  40. // if(nickname.value !== '' && messageText.value !== '')
  41. // jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: nickname.value, message: messageText.value})
  42. // .then(() => {
  43. // nickname.value = ''
  44. // messageText.value = ''
  45. // })
  46. // }
  47. // let savedId
  48. // jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: 0})
  49. // .then(({data, nextMessageId}) => {
  50. // savedId = nextMessageId
  51. // for (let message of data) {
  52. // addMessage(message)
  53. // }
  54. // })
  55. // setInterval(() => {
  56. // console.log(savedId)
  57. // jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: savedId})
  58. // .then(({data, nextMessageId}) => {
  59. // savedId = nextMessageId
  60. // if (data.length > 0) {
  61. // for (let message of data) {
  62. // addMessage(message)
  63. // }
  64. // }
  65. // })
  66. // }, 5000)
  67. //отэто всё с async
  68. let delay = (ms) => new Promise((fulfill) => setTimeout(() => fulfill(ms), ms))
  69. async function sendMessage(nick, message) {
  70. if(nick !== '' && message !== '') {
  71. await jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick, message})
  72. }
  73. }
  74. async function getMessages(messageId) {
  75. let {data, nextMessageId} = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId})
  76. for (let message of data) addMessage(message)
  77. savedId = nextMessageId
  78. }
  79. async function sendAndCheck() {
  80. await sendMessage(nickname.value, messageText.value)
  81. messageText.value = ''
  82. await getMessages(savedId)
  83. }
  84. async function checkLoop() {
  85. while (true) {
  86. await delay(5000)
  87. await getMessages(savedId)
  88. }
  89. }
  90. let savedId = 0
  91. getMessages(savedId)
  92. send.onclick = sendAndCheck
  93. checkLoop()