Cинтаксис Promise

Особенность объекта promise в том, что промис

  1. ждет получения данных от асинхронного события
  2. получает данные один раз и только для чтения

Общее описание Promise

Функция executor

аргумент конструктора класса Promise:

function executor (resolve, reject) {
    asyncCallback () {
        resolve(data);
        reject('Описание ошибки');
    }
}
                
Пример получения объекта promise из класса

    const objPromise = new Promise (executor);
    objPromise
      .then(data => console.log(data))
      .catch( err => consoloe.log(err    ))
        

mini-test

  1. objPromise
  2. Promise
  3. executor

Ваш ответ: ожидается

Функция executor

При создании объекта promise в качестве аргумента выступает некоторая функция - исполнитель. Особенностью executor является наличие 2-х обязательных аргументов которые обязаны быть вызваны в теле функции. Исторически первый параметр называют resolve, а второй reject. Но имена не имеют значения, имеет значение только порядок аргументов. Эти аргументы являются callback функциями. К счастью нам не надо описывать тело этих callback. Нам необходимо вызвать их в теле функции и передать


(resolve, reject)
function executor(one, two) {
   if (true) {
      return one('All right!')
one === resolve
  }
  return two('Error in IF condition!')
two === reject
}
    

Результат выполнения аргумента попадает в метод .then() или .catch().


objPromise
  .then(data => console.log(data)) 
'All right!'
  .catch( err => consoloe.log(err))
    

Оба метода выстраивают цепочку, т.е. результат вычисления обязательно будет получен, каким бы этот результат не был.

Метод может повторяться, выстраивая цепочки.

А метод .catch() прописан один раз, в конце всей цепочки. Сatch выполнится только если возникнет ошибка внутри аргумента promise (функции - executor) или внутри вычислений метода .then()


objPromise
.then(data => console.log(dat)) 
.catch( err => consoloe.log(err)) 
Error:
'Promise (rejected: 
ReferenceError: consoloe is not defined)'
            

Executor


function executor (resolve, reject) {
    if('все хорошо') {
        return resolve (
            'данные для Promise'
        )
    } else {
        return reject (
         `описание причины
         по которой
         данные не получены`
        )
    }
}
                

Пример promise

See the Pen first promise by Gennadiy ( @Gorbulin) on CodePen.

Статический метод Promise.race

Promise.race[prm1, prm2, ...].then(data => console.log(data), err => console.log(err))

Выполнится первый resolve или reject промис из массива

Пример 1

See the Pen promise race by Gennadiy ( @Gorbulin) on CodePen.

Пример 2

See the Pen rase promise by Gennadiy ( @Gorbulin) on CodePen.

Статический метод Promise.all

Promise.all[prm1, prm2, ...].then(data => console.log(data))

Выполнение произойдет только при resolve всх элементов массива промисов

Пример 1

See the Pen promise all by Gennadiy ( @Gorbulin) on CodePen.

Пример 2

See the Pen all promise by Gennadiy ( @Gorbulin) on CodePen.