
Bogdan
06.07.2017
15:01:03
пока функция в стеке не выполнится, из очереди в стек запушить ничего нельзя

Oleg
06.07.2017
15:01:11
Не путайте асинхронный и многопоточный
Исключение - если у вас цикл сам по себе асинхронный

Artyom
06.07.2017
15:02:17

Google

Maksim
06.07.2017
15:02:21

Oleg
06.07.2017
15:02:34
Не после
Если в очередь исполнения из цикла поступит вызов позже

? гриб
06.07.2017
15:03:18
нужен переводчик )

Maksim
06.07.2017
15:04:33
сначала цикл отработает, потом начнент отрабатывать вся асинхронщина что он породил

Евгений
06.07.2017
15:05:07
если я хочу пользоваться современными фичами языка, мне нужно освоить babel?
До этого сидел на ангуляре и таких проблем не возникало. Сейчас хочу поковырять vue.
Заодно нужна либа для http запросов. Приглядел fetch-polyfill. Всё правильно сделал?

Oleg
06.07.2017
15:05:22

Maksim
06.07.2017
15:07:09
что такое ожидание асинхронных событий? если подразумевается что в теле цикла порождается асинхронщина, то результат ее исполнения будет обработан всегда по окончанию цикла

xadd
06.07.2017
15:07:48
await внутри

Maksim
06.07.2017
15:08:02
хотел дописать "ну кроме await"
и то await это особый случай

xadd
06.07.2017
15:08:57
yield еще

Google

Maksim
06.07.2017
15:09:13
это все сахар, на суть не влияет

Andrey
06.07.2017
15:09:19

Maksim
06.07.2017
15:09:35
давай

Andrey
06.07.2017
15:10:18
Только это с js не связано. Это пошло из синхронных языков.
Как работают многопоточные приложения? Создаются несколько потоков, каждый из которых делает какую-то вещь. Но иногда требуется сделать какую-нибудь долгую операцию, к примеру, запрос на удаленный сервак. Что в этом случае делается? while по статусу завершения. Когда придёт ответ, то поток продолжит выполнение. Что происходит во время await? Поток отпускается, пока не выполнится операция, а после возобновляет своё выполнение. Это позволяет не блокировать потоки, если тебе надо сделать много таких опепраций.
Но это из c#, в js это просто сахар над промисами.
Так как js уже асинхронный.

Maksim
06.07.2017
15:14:40
не очень понял к чему это все

Сергей
06.07.2017
15:14:40
я могу ошибаться, но сам по себе v8 синхронен

Andrey
06.07.2017
15:15:00

Maksim
06.07.2017
15:15:11

Сергей
06.07.2017
15:15:27

Andrey
06.07.2017
15:15:32

Сергей
06.07.2017
15:15:43
однопоточен | синхронен
разницы нет по вашему?

Andrey
06.07.2017
15:15:55
js - асинхронен

Andrey
06.07.2017
15:16:08
Это ортогональные понятия.

Сергей
06.07.2017
15:16:28
js - асинхронен
когда я последний раз компилил v8 в нем не было setTimeout и ивентлупа

Maksim
06.07.2017
15:16:30

Rafael
06.07.2017
15:16:55

Google

Andrey
06.07.2017
15:17:25
Кстати о v8, а движок от MS копал кто-нибудь?

Maksim
06.07.2017
15:17:26

Вишневый чай
06.07.2017
15:17:31

Andrey
06.07.2017
15:17:31
Он вроде тоже открытый.

Сергей
06.07.2017
15:18:02

Maksim
06.07.2017
15:18:25
так v8 и не организовывает асинхронность

Сергей
06.07.2017
15:18:34
нуууу

Andrey
06.07.2017
15:18:37
Эм...

Сергей
06.07.2017
15:18:40
значит js сам по себе синхронен

Maksim
06.07.2017
15:18:48
и ивентлуп не в v8

Сергей
06.07.2017
15:18:51
асинхронность ему обеспечивает платформа

Andrey
06.07.2017
15:19:15

Maksim
06.07.2017
15:19:16

Сергей
06.07.2017
15:19:35
А как верно?
js синхронен
node.js и окружение бразуера асинхронно

Ywein
06.07.2017
15:19:46
JS синхронный и однопоточный. Асинхронность обеспечивается внешными АПИ.

Andrey
06.07.2017
15:19:47

Сергей
06.07.2017
15:19:56

Ywein
06.07.2017
15:20:10
Если посмотреть в исходники V8 - там вообще нет таких вещей как допустим setTimeout

Сергей
06.07.2017
15:20:23

Google

Вишневый чай
06.07.2017
15:20:28
Блин ну вы чем чат читаете, капитан

Maksim
06.07.2017
15:20:38

Сергей
06.07.2017
15:23:22
интересно как работают промисы в v8 без окружения

Sergey
06.07.2017
15:23:30
это на плюсах сделанно

Сергей
06.07.2017
15:23:39

Sergey
06.07.2017
15:23:49
кантор же расказывал как таймауты работают)

Сергей
06.07.2017
15:24:20
в js нет таймаутов

Sergey
06.07.2017
15:25:18
https://youtu.be/w4EHA9xqoNw?list=PLDyvV36pndZFWfEQpNixIHVvp191Hb3Gg

Admin
ERROR: S client not available

Maksim
06.07.2017
15:25:29
Так просимы синхронны без окружения
Промисы

Сергей
06.07.2017
15:25:46
*сообщения редактировать можно*

Ywein
06.07.2017
15:25:52
это лучше и наглядней

Savely
06.07.2017
15:26:52
Кстати. Вопрос. Почему некоторые промизы без then-catch не выполняются?
Вот например ловить ответ и ошибку с некоторых промизов не нужно. Они выполняются и всё работает. А некоторые просто игнорируются, но стоит добавить хотя бы пустой then и всё сразу работает.

Sergey
06.07.2017
15:27:28
спс, гляну

Andrey
06.07.2017
15:28:13

Ywein
06.07.2017
15:28:14
только Кантор на русском умеет)
да причем тут язык. ты закрой попап, там язык не нужен. там демонстрационная приложуха, которая показывает как это все работает наглядно

Sergey
06.07.2017
15:28:45

Google

Сергей
06.07.2017
15:29:12

Кирилл
06.07.2017
15:29:15

Ywein
06.07.2017
15:29:25
я попап смотрел ?
Ну в попапе там крутая лекция на которой это все подробно обьясняется, но она уже на англ, да

Oleg
06.07.2017
15:30:15
Сейчас открою страшную тайну, о которой никто не задумывался. Но самое страшное что это правда - JS ничем не отличается от других языков в плане синхронности и асинхронности. Это может вызвать удивление, но я поясню.

Алексей Игоревич
06.07.2017
15:31:10
подскажите где почитать и за что отвечает первая перменная (result_form) в функции?
function sendAjaxForm( result_form, ajax_form, url ) {

Oleg
06.07.2017
15:31:11
Дело в том что в других языках да - происходит вызов чего-то извне, например запрос по сети, после этого исполнение останавливается, ожидая ответа. После того как ответ пришел - продолжается исполнение с того же места дальше.
Так вот секрет в том что в JS тоже есть такое. Например некоторые библиотеки с нативным кодом могут заставлять интерпретатор ждать пока выполнится запрос. Например те что делают хеширование сложное. Есть вариант вызова синхронный, интерпретатор будет ждать.


Savely
06.07.2017
15:32:52
А у промисов есть гарантия выполнения? Возможно выполнение откладывается, пока не понадобятся результаты.
Пример 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
06.07.2017
15:33:36
Но в JS просто вот так вот исторически сложилось что все вызовы неблокирующие - вместо того чтобы ждать - вызов принимает в качестве параметра ссылку на функцию, которая отправляется в стек вызовов при получении ответа.
Но всё это в JS не с проста
В JS функции являются полноценными объектами и могут быть переданы по ссылке параметром. Во многих других языках так делать невозможно, функции там это методы какого-то класса.

Кирилл
06.07.2017
15:34:30

Oleg
06.07.2017
15:35:37
И есть ещё одна причина почему в JS вызовы модные именно с передачей калбека - события UI. Дело в том что они происходят только тогда когда юзер кликнет куда-либо. То есть абсурд блокировать всё пока не произойдет какое-либо событие.
И из вот этих особенностей - функции-объекты и UI - мы и получили моду на асинхронные вызовы

Savely
06.07.2017
15:36:32

Oleg
06.07.2017
15:36:32
Но в других языках тоже можно делать это. Просто там это не распространено.
То есть нет ни единой магии в асинхронности JS. Ни единой.
Просто мода и удобство.

Maksim
06.07.2017
15:37:18

Savely
06.07.2017
15:37:20

Oleg
06.07.2017
15:37:33