Sergey
однопоточен | синхронен
разницы нет по вашему?
Andrey
Andrey
js - асинхронен
Андрей
Это ортогональные понятия.
Sergey
js - асинхронен
когда я последний раз компилил v8 в нем не было setTimeout и ивентлупа
Maksim
Rafael 🌵
Андрей
Кстати о v8, а движок от MS копал кто-нибудь?
Maksim
Андрей
Он вроде тоже открытый.
Maksim
так v8 и не организовывает асинхронность
Sergey
нуууу
Андрей
Эм...
Sergey
значит js сам по себе синхронен
Maksim
и ивентлуп не в v8
Sergey
асинхронность ему обеспечивает платформа
Sergey
Андрей
Maksim
Sergey
А как верно?
js синхронен
node.js и окружение бразуера асинхронно
⩔wein
JS синхронный и однопоточный. Асинхронность обеспечивается внешными АПИ.
Андрей
Sergey
⩔wein
Если посмотреть в исходники V8 - там вообще нет таких вещей как допустим setTimeout
Sergey
CherryTea
Блин ну вы чем чат читаете, капитан
Maksim
Sergey
интересно как работают промисы в v8 без окружения
GG
это на плюсах сделанно
Sergey
GG
кантор же расказывал как таймауты работают)
Sergey
в js нет таймаутов
GG
https://youtu.be/w4EHA9xqoNw?list=PLDyvV36pndZFWfEQpNixIHVvp191Hb3Gg
Maksim
Так просимы синхронны без окружения
Maksim
Промисы
Sergey
*сообщения редактировать можно*
⩔wein
⩔wein
это лучше и наглядней
Savely
Кстати. Вопрос. Почему некоторые промизы без then-catch не выполняются?
Вот например ловить ответ и ошибку с некоторых промизов не нужно. Они выполняются и всё работает. А некоторые просто игнорируются, но стоит добавить хотя бы пустой then и всё сразу работает.
GG
спс, гляну
Андрей
⩔wein
только Кантор на русском умеет)
да причем тут язык. ты закрой попап, там язык не нужен. там демонстрационная приложуха, которая показывает как это все работает наглядно
GG
Sergey
Kirill
⩔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 функции являются полноценными объектами и могут быть переданы по ссылке параметром. Во многих других языках так делать невозможно, функции там это методы какого-то класса.
Kirill
Oleg
И есть ещё одна причина почему в JS вызовы модные именно с передачей калбека - события UI. Дело в том что они происходят только тогда когда юзер кликнет куда-либо. То есть абсурд блокировать всё пока не произойдет какое-либо событие.
Oleg
И из вот этих особенностей - функции-объекты и UI - мы и получили моду на асинхронные вызовы
Savely
Oleg
Но в других языках тоже можно делать это. Просто там это не распространено.
Oleg
То есть нет ни единой магии в асинхронности JS. Ни единой.
Oleg
Просто мода и удобство.
Savely
Oleg
Oleg
ixplo
поток-то один, приходится асинхронные вещи на потом откладывать, чтоб остальное не висло
ixplo
даже если колбек туда вставить
Maksim
функции первого порядка на мой взгляд никак не способствуют асинхронности, ничто не мещает передать аргументом вместо функции объект и вызвать потом его метод
Oleg
ixplo
эх, надо почитать про механику асинхроонсти )
Anonymous
Oleg
В языках где функции не первого порядка - так и делают
Maksim
это не костыль
Anonymous
Не знаком с андроидом, но там java, они могли сделать иначе?
Maksim
я java и имел в виду, в контексте андройда просто
Maksim
в последних версиях у них появились лямбды