Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Ну спасибо! Поглядим подробнее на промисы. Вкупе с данной статьёй может сделать предмет понятным: https://habr.com/ru/post/479062/
Мы видим Promise в списке микрозадач. Когда Promise выполняется и вызывается метод then(), catch() или finally(), функция обратного вызова с методом добавляется в очередь микрозадач. Это означает, что коллбэк с методом не выполняется немедленно, что делает JS код асинхронным.
Т.е. Promise автоматом делает ЛЮБОЙ код асинхронным? Или без асинхронного вызова типа setTimeout() всё равно никакой асинхронности не будет?!
Т.е. функция-исполнитель ниже всегда будет асинхронной:
let promise = new Promise(function(resolve, reject) {
// функция-исполнитель (executor)
});Или в неё нужно добавить что-то типа setTimeout():
let promise = new Promise(function(resolve, reject) {
// эта функция выполнится автоматически, при вызове new Promise
// через 1 секунду сигнализировать, что задача выполнена с результатом "done"
setTimeout(() => resolve("done"), 1000);
});чтобы она была асинхронной?
Т.е. Promise автоматом делает ЛЮБОЙ код асинхронным? Или без асинхронного вызова типа setTimeout() всё равно никакой асинхронности не будет?!
Благодарю! Будем разбираться.
А вот мой код, который я напишу там-то (в executor-e) или тут-то (в коллбеке then() ) или еще где-то (например, в Promise.resolve()) — как он будет выполняться в уже имеющейся системе действий, которые скрыты от ваших глаз под капотом движка JS?
Вот насколько же красиво сделали в C# — запустил
await Task.Run( () => { // функция-исполнитель (executor) }
И чётко знаешь, что функция выполняется асинхронно в отдельном потоке без всяких там setTimeout() и прочего.
Визуализация промисов и Async/Await