Реализация Promise — тоже старая тема, в интернете много статей и примеров кода одного типа, и многие из них — отличные реализации. Однако из-за «волшебного» API Promise и содержащейся в нем уникальной идеи асинхронной обработки реализация Promise по-прежнему остается сложной и интересной задачей.
Здесь я даю собственную реализацию. Чтобы лучше объяснить процесс реализации, я разделил реализацию Promise на 10 этапов и выполнил следующую кодовую базу в соответствии с правилом коммита по одному этапу за раз.
GitHub.com/coolingtower0223/pro…
Эта реализация в основном охватывает следующие функции Promise:
-
основные навыки:promise — это объект, который принимает функцию в качестве параметра. Когда обещание создается, функция выполняется немедленно.
-
Настройка асинхронных операций: вызываемый
Promise.prototype.thenчтобы установить некоторые будущие завершенные действия. Когда объект обещания будет разрешен, будет вызвана функция обратного вызова в теле then и будет получено асинхронное значение. -
цепной вызов:передача
Promise.prototype.thenвернет новый объект обещания. В цепочке промисов, когда выполняются шаги в первом промисе, цепочка автоматически продолжит попытки разрешить последующие промисы до конца. -
государственный контроль: после создания объекта-обещания начальное состояние находится в состоянии ожидания, а затем он либо разрешается, либо отклоняется.
-
обработка ошибок: Существует несколько способов обработки ошибок в промисах: вызов
Promise.prototype.thenПри передаче функции обработки ошибок или вызовеPromise.prototype.catch. -
ошибка доставки: когда состояние обещания в цепочке становится отклоненным, ошибка передается в конец цепочки до тех пор, пока не будет найден обработчик ошибки или тело перехвата. Асинхронные операции между местоположением отклонения и обработчиком ошибок выполняться не будут. Когда ошибка будет обработана, цепочка обещаний возобновит выполнение.
-
Автоматическое разрешение промисов в телах then/catch: когда функция обратного вызова, установленная в теле then/catch, возвращает промис, промис будет автоматически разрешен, а значение или сгенерированная им ошибка также будут переданы последующим промисам.
-
ловушка исключения: объект обещания может быть не только явно отклонен, но также может перехватывать исключения или ошибки, вызванные его собственным выполнением.
-
статический метод:
Promise.resolve,Promise.reject,Promise.all&Promise.reject -
Несколько вызовов затем: несколько вызовов
Promise.prototype.thenНекоторые асинхронные операции могут выполняться одновременно.
Для вышеописанной функции, также помеченной кодовой библиотекой 10, соответствующей тегу, вы видите облегчение передачи обслуживания.
Наконец, спасибо за то, что снялись, поделились и пообщались!