Начало программы – Клик на кнопку – Событие во времени – Конец чтения файла… • Программа не ждет I/O – Загрузка процесса предельно близка к 100% • Подписывается на события I/O • Выполняет код, когда событие наступило
– *NIX: select, epoll, kqueue – Win: GetMessage, PeekMessage • Основа – список событий • Подписываемся на событие • Выполняем код, когда событие произошло • Список событий пуст – конец
(file){ file = jpg2png(file); sendTo(file, servers).then(function (){ alert('tada!'); }); }); Список событий Когда придет запрос к серверу – запусти этот код Запрос к серверу
(file){ file = jpg2png(file); sendTo(file, servers).then(function (){ alert('tada!'); }); }); Список событий Пришел запрос к северу, выполняем обработчик Когда файл прочитается – запусти этот код Файл прочитан
(file){ file = jpg2png(file); sendTo(file, servers).then(function (){ alert('tada!'); }); }); Список событий Файл прочитался, выполняем обработчик Когда файлы отправятся – запусти этот код Файл отправлен Файл отправлен
эту функцию не раньше чем через это время – таймаут - миллисекунды • clearTimeout(timerId) – предотврати выполнение этого таймера – ид таймера – обычное число
эту функцию через данный интервал – интервал - миллисекунды • clearInterval(timerId) – предотврати выполнение этого интрвала – ид интервала – обычное число
Подготавливаем запрос xhr.open('GET', 'http://server.ru/file.jpg', true); // Подписываемся на событие "изменение статуса" xhr.addEventListener('readystatechange', function () { // Когда ответ пришел if (xhr.readyState === 4) { // Печатаем тело ответа console.log(xhr.responseText); } }, false); // Отправляем запрос xhr.send(); Работа с XHR
вызвана • OPENED=1 – функция send() еще не вызвана • HEADERS_RECEIVED=2 – Пришли заголовки • LOADING=3 – часть ответа пришла • DONE=4 – запрос завершен https://developer.mozilla.org/en-US/docs/DOM/ XMLHttpRequest