Closed IgorKulishov closed 6 years ago
Этот пример мы применим в проекте. Задание посмотреть и разобрать логику, задать вопросы если есть.
Обращаю внимание что "req.addEventListener" - это JavaScript встроенный метод для слушания событий (event listener). Event listener (слушатель событий) имеет два аргумента:
а) string (строка) - определяет событие, которые мы собираемся слушать. Существует ограниченный перечень типов событий (events) которые "addEventListener" может слушать.
К примеру события могут быть:
"click" - нажатие кнопки мышки
"mousemove" - мышкой провести над опредленным элементом
"load" - окончание загрузки определенного файла
Примеры применения на сайте: https://www.w3schools.com/js/js_htmldom_eventlistener.asp
Более полный перечень возможных событий есть на сайте https://www.w3schools.com/jsref/dom_obj_event.asp
Если обратил внимание некоторые начинаются с приставки "on": "onclick", "onload" и т.д.
б) функция (callback) которая выполняется когда наступает событие в первом аргументе (event). Мы не можем обычно придумывать свои называния events (они встроены в библиотеку JavaScript) но можем модифицировать функцию (callback).
Как я понял этот пример: создаем функцию, внутри которой создаем новый класс Promise, внутри котрого создаем новый XML запрос. Этот запрос мы открываем, определяем ему метод GET и определяем, что это будет асинхронный запрос. Добавляем слушатель событий на событие загрузка, который выведет нам либо что все нормально, либо что есть ошибка. Также добавляем слушатель на событие ошибка, который в случае ошибки выведет нам информацию о ней. И отправляем запрос. Ну и получение ответа, который выведется в консоли, либо ответ, либо данные об ошибке. Как-то так />
Да правильно в целом, только надо добавить несколько моментов.
Promise(function(**succeed**, **fail**){..})
При этом:
A) В случае получения ответа от сервера, внутри слушателя
req.addEventListener("load"..),
мы благополучно завершаем промис используем первый метод Promise ( в данном случае "succeed" ) помещая внутрь метода succeed результаты полученные от сервера слушателем (то что мы получили от сервера), для передачи ответа сервера дальше методу слушающему ответ нашей ф-ции get при помощи метода then (см. след п.2):
succeed(req.responseText);
Б) В случае, если сервер принес обратно ошибку (сервер не ответил или ответил с ошибкой) внутри второго слушателя:
req.addEventListener("error"..) ,
, то мы используем второй аргемент (он же метод) промиса fail для отправки кода ошибки полученного с сервера дальше методу слушающему ответ нашей ф-ции get при помощи метода then (см. след п.2).
.then(function(text) {
console.log("data.txt: " + text);
}
аргумент callback ф-ции (в данном случае text) несет ответ благополучно завершенного промиса в 1.А).
Б) второй аргумент это callback ф-ция в которую приходит сообщение об ошибке.
, function(error) {
console.log("Failed to fetch data.txt: " + error);
}
аргумент callback -функции (в данном случае error) несет сообщение об ошибке изнутри второго метода Promise (fail) описанного в 1.Б).
Пример на Promise взятый из книги
Теперь тоже самое только с примером обращения на сервер помещенного в Promise (из книги: https://habrahabr.ru/post/245145/)