Методы промисов Javascript с примером Polyfill: шпаргалка для разработчиков

Методы промисов Javascript с примером Polyfill: шпаргалка для разработчиков

15 ноября 2022 г.

Promise помогает делать что-то асинхронно. Это способ обработки асинхронных операций в JavaScript.

Обещание состоит из трех состояний:

  1. Ожидание: исходное состояние, ни выполнено, ни отклонено.
  2. Выполнено: обещание выполнено (успех)
  3. Отклонено: невыполненное обещание (сбой)

Не теряя времени, давайте узнаем о функциях Promise.

Примечание: я также добавил пример Polyfill, который поможет вам легко понять, а также поможет вам, если вы готовитесь к интервью.

1. Обещание.все

Promise.all принимает на вход массив обещаний и возвращает объект обещания. Возвращенное обещание будет разрешено, когда будут разрешены все обещания во входном массиве. Если какое-либо обещание во входном массиве отклонено, возвращенное обещание будет отклонено с указанием причины отклонения первого обещания.

Пример:
const promises = [1, 2, 3].map((item) => Promise.resolve(item));
Promise.all(promises).then(console.log); // [1, 2, 3]

Пример полифилла:
const all = (promises) => {
  return new Promise((resolve, reject) => {
    const result = [];
    let count = 0;
    for (let i = 0; i < promises.length; i++) {
      Promise.resolve(promises[i]).then((res) => {
        result[i] = res;
        count++;
        if (count === promises.length) {
          resolve(result);
        }
      }, reject);
    }
  });
};


2. Обещание.гонка

Он принимает массив обещаний в качестве входных данных и возвращает объект обещания. Возвращенное обещание будет разрешено/отклонено, как только будет разрешено/отклонено одно из обещаний во входном массиве.

Пример:
const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
Promise.race(promises).then(console.log); // 1

Пример полифилла:
const race = (promises) => {
  return new Promise((resolve, reject) => {
    promises.forEach((promise) =>
      Promise.resolve(promise).then(resolve, reject)
    );
  });
};

const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
race(promises).then(console.log); // 1


3. Обещание.все выполнено

Он принимает массив обещаний в качестве входных данных и возвращает объект обещания. Возвращенное обещание будет разрешено, когда будут выполнены все обещания во входном массиве. Возвращенное обещание будет разрешено с помощью массива объектов, каждый из которых описывает результат каждого обещания во входном массиве.

Пример:
const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
Promise.allSettled(promises).then(console.log); // [{status: "fulfilled", value: 1}, {status: "rejected", reason: 2}, {status: "fulfilled", value: 3}]

Пример полифилла:
const allSettled = (promises) => {
  return new Promise((resolve) => {
    const result = [];
    let count = 0;

    const handleResult = (value, index, status) => {
      result[index] = { status, value };
      count++;
      if (count === promises.length) {
        resolve(result);
      }
    };

    for (let i = 0; i < promises.length; i++) {
      Promise.resolve(promises[i]).then(
        (res) => handleResult(res, i, "fulfilled"),
        (err) => handleResult(err, i, "rejected")
      );
    }
  });
};

const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
allSettled(promises).then(console.log); // [{status: "fulfilled", value: 1}, {status: "rejected", reason: 2}, {status: "fulfilled", value: 3}]


4. Обещание.любое

Он принимает массив обещаний в качестве входных данных и возвращает объект обещания. Возвращенное обещание будет разрешено, когда будет разрешено любое из обещаний во входном массиве. Если все обещания во входном массиве отклонены, возвращенное обещание будет отклонено с массивом ошибок.

Пример:
const promises = [Promise.reject(1), Promise.reject(2), Promise.resolve(3)];
Promise.any(promises).then(console.log); // 3

Пример полифилла:
const any = (promises) => {
  return new Promise((resolve, reject) => {
    const result = [];
    let count = 0;

    const handleResult = (value, index, status) => {
      result[index] = { status, value };
      count++;
      if (count === promises.length) reject(result);
    };

    for (let i = 0; i < promises.length; i++) {
      promises[i].then(resolve, (err) => handleResult(err, i, "rejected"));
    }
  });
};

const promises = [Promise.reject(1), Promise.reject(2), Promise.resolve(3)];
any(promises).then(console.log); // 3


5. Обещание.разрешение

Возвращает выполненное обещание.

Пример:
Promise.resolve(1).then(console.log); // 1

Пример полифилла:
const resolve = (value) => {
  return new Promise((resolve) => resolve(value));
};

resolve(1).then(console.log); // 1


6. Обещание.отклонить

Он возвращает отклоненное обещание.

Пример:
Promise.reject(1).catch((err) => console.log(err)); // 1

Пример полифилла:
const reject = (value) => new Promise((resolve, reject) => reject(value));

reject(1).catch((err) => console.log(err)); // 1


Спасибо, что прочитали 😊

Есть вопросы или дополнения? пожалуйста, оставьте комментарий.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE