Sergey
однопоточен | синхронен разницы нет по вашему?
Andrey
js - асинхронен
Андрей
Это ортогональные понятия.
Sergey
js - асинхронен
когда я последний раз компилил v8 в нем не было setTimeout и ивентлупа
Maksim
Ты спросил что такое "ожидание асинхронных событий".
это был больше риторический вопрос
Андрей
Кстати о v8, а движок от MS копал кто-нибудь?
CherryTea
М девочек тогда уж, раз за бесплатно
Ну это как раз было, ночь с топовой порнозвездой сотруднику года
Андрей
Он вроде тоже открытый.
Sergey
v8 это про js, setTimeout это не про js
и как ты собрался организовать асинхронность без ивентлупа?
Maksim
так v8 и не организовывает асинхронность
Sergey
нуууу
Андрей
Эм...
Sergey
значит js сам по себе синхронен
Maksim
и ивентлуп не в v8
Sergey
асинхронность ему обеспечивает платформа
Sergey
Андрей
вот это не верно
А как верно?
Maksim
асинхронность ему обеспечивает платформа
об одном и том же похоже говорим
Sergey
А как верно?
js синхронен node.js и окружение бразуера асинхронно
⩔wein
JS синхронный и однопоточный. Асинхронность обеспечивается внешными АПИ.
Андрей
⩔wein
Если посмотреть в исходники V8 - там вообще нет таких вещей как допустим setTimeout
CherryTea
Блин ну вы чем чат читаете, капитан
Sergey
интересно как работают промисы в v8 без окружения
GG
это на плюсах сделанно
GG
кантор же расказывал как таймауты работают)
Sergey
в js нет таймаутов
GG
https://youtu.be/w4EHA9xqoNw?list=PLDyvV36pndZFWfEQpNixIHVvp191Hb3Gg
Maksim
Так просимы синхронны без окружения
Maksim
Промисы
Sergey
*сообщения редактировать можно*
⩔wein
это лучше и наглядней
Savely
Кстати. Вопрос. Почему некоторые промизы без then-catch не выполняются? Вот например ловить ответ и ошибку с некоторых промизов не нужно. Они выполняются и всё работает. А некоторые просто игнорируются, но стоит добавить хотя бы пустой then и всё сразу работает.
GG
это лучше и наглядней
только Кантор на русском умеет)
GG
спс, гляну
⩔wein
только Кантор на русском умеет)
да причем тут язык. ты закрой попап, там язык не нужен. там демонстрационная приложуха, которая показывает как это все работает наглядно
⩔wein
я попап смотрел 😂
Ну в попапе там крутая лекция на которой это все подробно обьясняется, но она уже на англ, да
Oleg
Сейчас открою страшную тайну, о которой никто не задумывался. Но самое страшное что это правда - JS ничем не отличается от других языков в плане синхронности и асинхронности. Это может вызвать удивление, но я поясню.
Алексей И.
подскажите где почитать и за что отвечает первая перменная (result_form) в функции? function sendAjaxForm( result_form, ajax_form, url ) {
Oleg
Дело в том что в других языках да - происходит вызов чего-то извне, например запрос по сети, после этого исполнение останавливается, ожидая ответа. После того как ответ пришел - продолжается исполнение с того же места дальше.
Oleg
Так вот секрет в том что в JS тоже есть такое. Например некоторые библиотеки с нативным кодом могут заставлять интерпретатор ждать пока выполнится запрос. Например те что делают хеширование сложное. Есть вариант вызова синхронный, интерпретатор будет ждать.
Savely
А у промисов есть гарантия выполнения? Возможно выполнение откладывается, пока не понадобятся результаты.
Пример 1: bot.sendMessage(msg.chat.id, 'test'); — работает (сообщение доходит юзеру). bot.sendMessage(msg.chat.id, 'test') .then(function (res) { console.log(res); }); — работает. Пример 2: r.table('messages').insert({msg: 'test'}); — НЕ работает (то есть база не обновляется никак). r.table('messages').insert({msg: 'test'}) .then(function (res) { console.log(res); }); — работает. Первый пример это Bot API для Telegram. Второй это драйвер базы данных.
Oleg
Но в JS просто вот так вот исторически сложилось что все вызовы неблокирующие - вместо того чтобы ждать - вызов принимает в качестве параметра ссылку на функцию, которая отправляется в стек вызовов при получении ответа.
Oleg
Но всё это в JS не с проста
Oleg
В JS функции являются полноценными объектами и могут быть переданы по ссылке параметром. Во многих других языках так делать невозможно, функции там это методы какого-то класса.
Oleg
И есть ещё одна причина почему в JS вызовы модные именно с передачей калбека - события UI. Дело в том что они происходят только тогда когда юзер кликнет куда-либо. То есть абсурд блокировать всё пока не произойдет какое-либо событие.
Oleg
И из вот этих особенностей - функции-объекты и UI - мы и получили моду на асинхронные вызовы
Oleg
Но в других языках тоже можно делать это. Просто там это не распространено.
Oleg
То есть нет ни единой магии в асинхронности JS. Ни единой.
Oleg
Просто мода и удобство.
Maksim
То есть нет ни единой магии в асинхронности JS. Ни единой.
мне кажется вы немного не правильно понимаете природу асинхронности js
ixplo
поток-то один, приходится асинхронные вещи на потом откладывать, чтоб остальное не висло
ixplo
даже если колбек туда вставить
Maksim
функции первого порядка на мой взгляд никак не способствуют асинхронности, ничто не мещает передать аргументом вместо функции объект и вызвать потом его метод
ixplo
эх, надо почитать про механику асинхроонсти )
Oleg
В языках где функции не первого порядка - так и делают
Maksim
А вот это уже как костыль звучит, в устоявшейся (по удобности, описанной выше) концепции
у андройда так ивенты и происходят, вместо колбэка реализация интерфейса с нужным методом "onClick" например
Maksim
это не костыль
Anonymous
Не знаком с андроидом, но там java, они могли сделать иначе?
Maksim
я java и имел в виду, в контексте андройда просто
Maksim
в последних версиях у них появились лямбды