Мы знаем, что в JavaScript мы можем передать одну функцию в качестве параметра другой функции. Например:

Function a(b){
  b();
}

Мы знаем, что эти функции будут вызываться линейно. То есть сначала будет вызван a, а затем b. Но проблема в том, что нам нужно принести данные из внешнего места, что сокращенно обозначается как (интерфейс прикладного программирования)API.

Или это занимает много времени. Например:

function a() { 
  for (let i = 0; i < 10000000; i++){

  }
}

function b(){
  console.log(‘Hello’);
}

function c(){
  console.log(‘Here’);
}

a();
b();
c();
Output:
Hello
Here

Здесь значение функции a() не приходит. Причина в том, что код здесь занимает много времени. Мы знаем, что JavaScript называется однопоточным языком. Для запуска программы запускается процесс выполнения, называемый Thread. Многие процессы вместе образуют поток. Когда я работаю в javascript, он выполняет все в одном потоке. Теперь, когда мы работаем, JavaScript никогда не сможет выполнять функции b() и c(), пока не будет выполнена функция a(). Это связано с тем, что функция с именем a() блокирует функции b() и c(). Вот почему JavaScript обычно называют однопоточным языком.

Но даже если это единственный язык, мы можем сделать его неблокирующим. Неблокирующий метод — обещание().Обещание — это объект javascript, который указывает, будет ли задача разрешить() или отклонить () в будущем. Я привел пример обещания в реальном времени:

Заказываем еду в ресторане. Официант заверяет нас в этой еде. Это означает, что официант дает нам «обещание». Официант говорит мне, что либо он даст мне поесть, либо выйдет из кухни и скажет, что еды нет. То есть это либо разрешение, либо отклонение.

То есть обещание — это файл JavaScript, который дает прокси для любого файла, который не будет разрешен или отклонен в будущем. Пример:

function a() {
   return new promise((resolve, reject) => {
     setTimeout(() => {
       resolve(console.log('Hello from promise'));
     }, 5000);
  });
}
function b(){
  console.log('Hello');
}
function c(){
  console.log('Here');
}
a();
b();
c();
output:
Hello
Here
Hello From Promise

Здесь мы использовали установленное время, потому что мы можем использовать его, если хотим выполнить задачу через определенное время.

Обещание имеет функцию в качестве параметра, эта функция имеет два аргумента, один — разрешение, а другой — отклонение. У нас есть функция в javascript, которая называется set time out. С помощью которого мы можем выполнить через указанное время. По истечении указанного времени мы выполняем обещание. Затем я возвращаю обещание из функции с именем a. Затем вызвал функцию.

Когда мы выполняем какой-либо код, JavaScript помещает все в стек вызовов. Сначала a(), затем b(), затем c(). Здесь a() заблокирован, пока b() и c() выполняют тяжелую работу. Для этого мы делаем «a()» обещанием. В результате он больше не будет блокировать b(), c(). Потому что у нас есть еще одна вещь, такая как стек вызовов Очередь обратного вызова. Затем b(), c() заканчивают работу и приходят в цикл обработки событий. Затем, если стек вызовов пуст и не занят, они возвращаются в стек вызовов.