Задать вопрос
@asdasdqwe

Являются ли промисы асинхронными?

Документация: помисы нужны, чтобы текущий стек не блокировался при ресурсоемких работ
new Promise(() => {
  console.log('много вычислений')
})

console.log('стек')


Результат:
много вычислений,
стек


Вместо обычного console.log('много вычислений') допустим код на 150 тыс строк. Ведь этот код блокирует стек

Всегда думал, что асинхронность - это когда часть кода (асинхронная) попадает в очередь, и выполняется ПОСЛЕ текущего стека

Код внутри промиса выполняется СРАЗУ же, а не после текущего стека
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Дмитрий Беляев К ответам на вопрос (4)
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
new Promise(resolve => {
  // здесь код выполняется синхронно
  resolve();
}).then(() => {
  // здесь уже асинхронно, в ближайшем микротаске после вызова resolve выше
});

Promise.resolve().then(() => {
  // здесь тоже асинхронно, в ближайшем микротаске
});


много вычислений
Это не про асинхронность.
Асинхронность - это про кооперативную многозадачность, то есть промис может только отложить вычисления на потом, но они все равно заблокируют поток, который у JS всего один.
А для "много вычислений" без блокирования основного потока, эти "много вычислений" нужно выносить в отдельный поток. В JS для этого есть воркеры. А вот уже результат от воркера можно ждать асинхронно.
Ответ написан
Комментировать