1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ambit-promise-for-es

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.zh-CN.md 4.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 19:37 ced876c

Promise For ES

✨ Реализация Promise в соответствии со стандартом ES2021, основанная на синтаксисе ES3 и обладающая сверхвысокой совместимостью. Также соответствует стандартам ECMA-262 и Promises/A+.

Лучший способ изучить Promise — это реализовать его самостоятельно.

Характеристики:

  • Основан на ES3, поддерживается практически всеми браузерами;
  • Соответствует стандартам ECMA-262 и Promises/A+ и проходит тесты на соответствие Promises/A+, а также другие связанные тесты;
  • Реализует новые функции Promise из ES2018, ES2020 и ES2021.

Поддержка:

Способность Версия Поддержка
new Promise(executor) ES2015
Promise.prototype.then(onFulfilled, onRejected) ES2015
Promise.prototype.catch(onRejected) ES2015
Promise.prototype.finally(onFinally) ES2018
Promise.resolve(value) ES2015
Promise.reject(reason) ES2015
Promise.all(iterable) ES2015
Promise.race(iterable) ES2015
Promise.allSettled(iterable) ES2020
Promise.any(iterable) ES2021

Установка:

npm i -S promise-for-es

Использование:

  1. В качестве полифилла:
// ES Module
import 'promise-for-es/polyfill';
// CommonJS
require('promise-for-es/polyfill');
  1. В качестве замены полифиллу:
// ES Module
import Promise from 'promise-for-es';
// CommonJS
const Promise = require('promise-for-es');

Основная логика: На примере следующего кода:

const executor = (resolutionFunc, rejectionFunc) => {
    // Бизнес-логика
};
const p1 = new Promise(executor);
p1.then(onFulfilled, onRejected);

p1.then(onFulfilled, onRejected):

  • Создаёт новый объект Promise p2;
  • Проверяет состояние p1:
    • Если «pending», добавляет onFulfilled в fulfill list, а onRejected — в reject list;
    • Если «fulfilled», создаёт микрозадачу с результатом onFulfilled, p2 и p1;
    • Если «rejected», создаёт микрозадачу с результатом onRejected, p2 и p1.
  • Возвращает p2.

new Promise(executor):

  • Создаёт функции разрешения и отклонения: resolutionFunc и rejectionFunc;
  • Вызывает executor с resolutionFunc и rejectionFunc в качестве параметров.

resolutionFunc(value):

  • Если какая-либо функция разрешения уже была вызвана, возвращает;
  • Если value является thenable, создаёт микрозадачу с value и возвращает;
  • Изменяет состояние p1 на «fulfilled»;
  • Для каждого элемента в fulfill list создаёт микрозадачу.

rejectionFunc(reason):

  • Если какая-либо функция отклонения уже была вызвана, возвращает;
  • Изменяет состояние p1 на «rejected»;
  • Для каждого элемента в reject list создаёт микрозадачу.

Тестирование:

  • npm run test:aplus запускает тест на соответствие Promises/A+;
  • npm run test:es6 запускает promises-es6-tests;
  • npm run test:core-js запускает тесты core-js, связанные с Promise.

Ссылки:

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ambit-promise-for-es.git
git@api.gitlife.ru:oschina-mirror/ambit-promise-for-es.git
oschina-mirror
ambit-promise-for-es
ambit-promise-for-es
master