Size: a a a

JavaScript Noobs — сообщество новичков

2020 February 15

E

Egor in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
и? он-же сразу резолвится у тебя.
Да, есть такое, ну в любом случае это будет в then
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Egor
Библиотека подписки на евенты, верно? Нативного нет ничего?
источник

E

Egor in JavaScript Noobs — сообщество новичков
Прочитал первую строку, дом события
источник

E

Egor in JavaScript Noobs — сообщество новичков
Egor
Прочитал первую строку, дом события
А у меня фция
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Egor
Да, есть такое, ну в любом случае это будет в then
разные браузеры по разному отрабатывают setTimeout(..,0), фактически магия...
источник

E

Egor in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
разные браузеры по разному отрабатывают setTimeout(..,0), фактически магия...
Как я уже говорил, в целом жс один большой костыль. Жаль ещё не придумано ничего совершеннеек
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Egor
А у меня фция
ну и повесь шину на document.
источник

VH

Vladyslav Hrehul in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
разные браузеры по разному отрабатывают setTimeout(..,0), фактически магия...
не там все просто и везде одинаково
источник

VH

Vladyslav Hrehul in JavaScript Noobs — сообщество новичков
есть колл стак, в который почредено закыдывается код
источник

EA

El Anonimo in JavaScript Noobs — сообщество новичков
Egor
Да, есть такое, ну в любом случае это будет в then
На сейчас придумал такое объяснение.
1. Коллбеки Promise'ов исполняются синхронно. Проще говоря, Promise будет первой синхронной вещью в коде.
2. Посколько Promise p включает в себя p.then, то p.then попадает на стек и ждёт, пока Promise отрезолвит.
3. console.log() в низу синхронен, попадает на стек вторым, отрабатывает.
4. Тут резолвит Promise и потому может отработать p.then, ждавший на стеке.
5. Остаётся setTimeout.
источник

VH

Vladyslav Hrehul in JavaScript Noobs — сообщество новичков
Дальше есть апи каждого бразуера, и если движок видит что есть settimeout - он отправляет его в апи браузера, браузер запускает счетчик задержки и потом возвратит тот код назад в коллстэк
источник

DB

Dmitriy Barabanov in JavaScript Noobs — сообщество новичков
El Anonimo
Привет.
Почему в это коде p.then отрабатывает раньше, чем setTimeout()?
https://jsbin.com/kimesunune/edit?html,js,console,output
var a = 5;

setTimeout(function timeout() {
 console.log('timeout ran', a);
 a = 10;
}, 0);

var p = new Promise(function(resolve, reject) {
 console.log('promise ran', a);
 a = 25;
 resolve();
});

p.then(() => console.log('promise .then ran:', a));

console.log('global ran', a);
1) потому что промисы были есть и всегда будут микротастками для браузера. А Settimeout. interval и другое подобное API - Макротасками.
2) Микротаски всегда выполняются в пределах текущего раунда цикла. Макро таски на следующем раунде цикла
3) Если вы поставите в очредь бесконечное количество микротасок - вы повесите браузер. Да, циклом из промисов вы повесите вкладку на мертво
4) Если вы поставите в очередь бесконечное количество макротасок, то у браузера все равно будет время реагировать на пользовательский ввод
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Vladyslav Hrehul
не там все просто и везде одинаково
реально нет. si и sto могут вклиниться в любой этап life-цикла страницы.
источник

VH

Vladyslav Hrehul in JavaScript Noobs — сообщество новичков
Но жс же однопоточный и даже если у тя тамаут на 0 сек, - он выполнится после всего остального кода, так как идет "переброска"
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Vladyslav Hrehul
Но жс же однопоточный и даже если у тя тамаут на 0 сек, - он выполнится после всего остального кода, так как идет "переброска"
уверен, что он будет первым, даже если первым объявлен?
источник

S

Sm•ok 😈✔️ in JavaScript Noobs — сообщество новичков
Vladimir Yefremov
я тоже думаю, что по ИД - удобнее и правильнее, но он начал ссылаться на своего препода с курсов, поэтому я захотел уточнить здесь. Больше верю чату, чем тому преподу.
Смотря на что
источник

VH

Vladyslav Hrehul in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
уверен, что он будет первым, даже если первым объявлен?
что именно?
источник

S

Sm•ok 😈✔️ in JavaScript Noobs — сообщество новичков
Тут дело ни в какой не скорости, а правильности
источник

EA

El Anonimo in JavaScript Noobs — сообщество новичков
Dmitriy Barabanov
1) потому что промисы были есть и всегда будут микротастками для браузера. А Settimeout. interval и другое подобное API - Макротасками.
2) Микротаски всегда выполняются в пределах текущего раунда цикла. Макро таски на следующем раунде цикла
3) Если вы поставите в очредь бесконечное количество микротасок - вы повесите браузер. Да, циклом из промисов вы повесите вкладку на мертво
4) Если вы поставите в очередь бесконечное количество макротасок, то у браузера все равно будет время реагировать на пользовательский ввод
Спасибо за инфу. Прочим участникам тоже.
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Vladyslav Hrehul
Но жс же однопоточный и даже если у тя тамаут на 0 сек, - он выполнится после всего остального кода, так как идет "переброска"
мне больше нравится через raf нулевые калбэки пробрасывать. вот там всё чётко и однозначно.
источник