Все круто! Небольшая придирка к произношению слова Promise, она так и читается -- "промис", а не "промайс". Это, видимо, какая-то распространенная недопонимание чтения слов, что заканчивается на "-ise", ведь многие слова с этим окончанием так и читаются, как "-айз": ентерпрайз, райз и т.д. Например, есть у меня есть пара знакомых, которые произносят слово Service как "сервайс"
Мало. :( Не устаканивает знания. Надо еще что-нибудь почитать, посмотреть, порешать, да так, чтобы все эти переходы от асинхронщины к синхронщине и от async к промисам улеглись в голове. Ессно, я про себя только говорю. Наверное, пойду к Кантору, "Вы не знаете JS", Фланагану и на CodeWars. Тяжко дается эта тема почему-то.
Тимур, не смог нигде найти информации, может вы знаете? Насколько я знаю, JS выполняет все функции до завершения. Вопрос в том, что происходит с функцией когда внутри нее мы делаем await и промис еще не зарезолвися. Текущая функция пропадает из стека вызова? Ведь await не блокирует поток, следовательно мы должны эту функцию убрать из стека, но тогда другой вопрос, как мы возвращаемся в нее, когда промис (await) зарезолвился? await умеет сохранять stack trace и возвращается во время резолва в нужное место?
repl.it/@Shramkoweb/RadiantPreviousUtilities вот небольшая демка. Из нее видно, что во время await мы не блокирем выполнение, и дальше передаем управление другой ф-и синхронной, но как мы возвращаемся назад и что происходит в эти моменты в стеке, мне не ясно и не видел внятных обьяснений нигде.
Промисы используют колбэки,ивентлуп и микротаски. эта вся машинерия работает так же как и вся асинхронщина, тут рассказывает чувак хорошо th-cam.com/video/8cV4ZvHXQL4/w-d-xo.html
@@TimurShemsedinov спасибо, это видео смотрел. Но нигде нет именно объяснения await, ведь только в нем мы выходим из функции, а потом возвращаемся в нее. В колбеках и промисах мы не восстанавливаем работу вызывающей функции.
привет. вопрос не по теме. 6:17 "сплит, двоеточие и там асинхронную лямду". Если под лямбдой подразумевается стрелочная функция, то ее this не найдет split. const obj = { name: 'Marcus Aurelius', split: async (sep = ' ') => { return this.name.split(sep); } }; (async () => { console.log('await obj.split() =', await obj.split()); })(); // UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'split' of undefined Или что имеется в виду?
1:00 "теперь появился" означает JS версии ES2017 и выше Я сидел, не вдуплял, почему мой TS код не отличает Function от AsyncFunction. Оказалось я запускал в target: ES2016
Это не так, js отличал и раньше, но ts генерирует свои глючные полифилы, которые не только убивают производительность, но и изменяют поведение, предусмотренное спецификацией, а ts как известно, ни какой спецификации не имеет и может выдавать любую фигню на выходе
@@TimurShemsedinov Да, действительно. Я сейчас посмотрел во что компилируется async в TS target: ES2016 и там, логично, полифилы, ведь async/await появились в ES2017, и в JS это вообще должна была быть синтаксическая ошибка, что-то я об этом сразу не подумал Но я немного не понял, что вы имели ввиду под "JS и раньше отличал"? До ES2017 же не было конструктора AsyncFunction и функции с промисами были(и остались) Function
Спасибо!
фабрика пришествий улыбнула)
Спасибо огромное!!!! Наконец-то смог более-менее разобраться как "под копотом" себя ведут промисы и await.
Спасибо за лекции.
Спасибо за объяснение таких сложных тем))
Все круто! Небольшая придирка к произношению слова Promise, она так и читается -- "промис", а не "промайс". Это, видимо, какая-то распространенная недопонимание чтения слов, что заканчивается на "-ise", ведь многие слова с этим окончанием так и читаются, как "-айз": ентерпрайз, райз и т.д. Например, есть у меня есть пара знакомых, которые произносят слово Service как "сервайс"
13:21 "Просто это жоподельная константа, я не знаю, чему она должна быть равна". Я понимаю, что именно там звучит, но... :)))
Спасибо большое!
Мало. :( Не устаканивает знания. Надо еще что-нибудь почитать, посмотреть, порешать, да так, чтобы все эти переходы от асинхронщины к синхронщине и от async к промисам улеглись в голове. Ессно, я про себя только говорю. Наверное, пойду к Кантору, "Вы не знаете JS", Фланагану и на CodeWars. Тяжко дается эта тема почему-то.
Спасибо!
Тимур, не смог нигде найти информации, может вы знаете?
Насколько я знаю, JS выполняет все функции до завершения. Вопрос в том, что происходит с функцией когда внутри нее мы делаем await и промис еще не зарезолвися. Текущая функция пропадает из стека вызова? Ведь await не блокирует поток, следовательно мы должны эту функцию убрать из стека, но тогда другой вопрос, как мы возвращаемся в нее, когда промис (await) зарезолвился?
await умеет сохранять stack trace и возвращается во время резолва в нужное место?
repl.it/@Shramkoweb/RadiantPreviousUtilities вот небольшая демка. Из нее видно, что во время await мы не блокирем выполнение, и дальше передаем управление другой ф-и синхронной, но как мы возвращаемся назад и что происходит в эти моменты в стеке, мне не ясно и не видел внятных обьяснений нигде.
Промисы используют колбэки,ивентлуп и микротаски. эта вся машинерия работает так же как и вся асинхронщина, тут рассказывает чувак хорошо th-cam.com/video/8cV4ZvHXQL4/w-d-xo.html
@@TimurShemsedinov спасибо, это видео смотрел. Но нигде нет именно объяснения await, ведь только в нем мы выходим из функции, а потом возвращаемся в нее.
В колбеках и промисах мы не восстанавливаем работу вызывающей функции.
@@shramko-dev await это ожидание promise, а primise это абстракция над колбеком. Посмотри мои лекции по асинхронности
@@shramko-dev вот эту th-cam.com/video/DXp__1VNIvI/w-d-xo.html
привет. вопрос не по теме.
6:17 "сплит, двоеточие и там асинхронную лямду".
Если под лямбдой подразумевается стрелочная функция, то ее this не найдет split.
const obj = {
name: 'Marcus Aurelius',
split: async (sep = ' ') => {
return this.name.split(sep);
}
};
(async () => {
console.log('await obj.split() =', await obj.split());
})(); // UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'split' of undefined
Или что имеется в виду?
У лямбд нет this.
У вас в thenable (9 пример) не работают цепочные вызовы метода then. Я исправил, сделал пуллреквест
Для чего нам вообще нужен асинхронный конструктор, где мы его можем применить вообще?
Например логгер, соединение с базой, сетевой протокол, да что угодно, чтоб не делать отдельный метод инициализации
Привет. Почему __proto__ - жлобство, а Object.getPrototypeOf() - прилично?
Потому, что в стандарте __proto__ нет и реализация доступа к скрытому полю отдается на откуп среде запуска
@@TimurShemsedinov В стандарте JS? Т.е. работает либо под Нодой, либо под браузером? Спасибо.
1:00 "теперь появился" означает JS версии ES2017 и выше
Я сидел, не вдуплял, почему мой TS код не отличает Function от AsyncFunction. Оказалось я запускал в target: ES2016
Это не так, js отличал и раньше, но ts генерирует свои глючные полифилы, которые не только убивают производительность, но и изменяют поведение, предусмотренное спецификацией, а ts как известно, ни какой спецификации не имеет и может выдавать любую фигню на выходе
@@TimurShemsedinov Да, действительно. Я сейчас посмотрел во что компилируется async в TS target: ES2016 и там, логично, полифилы, ведь async/await появились в ES2017, и в JS это вообще должна была быть синтаксическая ошибка, что-то я об этом сразу не подумал
Но я немного не понял, что вы имели ввиду под "JS и раньше отличал"? До ES2017 же не было конструктора AsyncFunction и функции с промисами были(и остались) Function