Промисы (понимание, имплеметация)
Здравствуйте! Пытаясь понять вроде бы несложную тему промисов, заодно пробую самостоятельно реализовать минимальное API (then, catch), но некоторые затупы не могу преодолеть. Понял я вот что:
1) У промиса должно быть 3 состояния (pending, fulfilled, rejected) 2) У промиса есть 2 метода then() и catch() 3) При создании экземпляра промиса var promise = new Promise(fuction(resolve, reject)) назначается состояние pending, а вот с вызовом resolve непонятно - нужно его сразу вызвать или сложить в массив (и когда его в этом случае вызывать)? И зачем Promise() принимает в аргументы функцию с аргументами, а не просто аргументы как метод then()? 4) С этим пунктом уже туго, но я так понимаю, что если у нас вызов функции сложился в массив, то аргументы вызова метода then() мы складываем в тот же массив, чтобы потом поочерёдно их вызывать? 5) Ну а тут реализация метода catch(), который получает управление, если не срабатывает resolve, но как это определить? Понятно, что ошибку через try/catch можно поймать, а применимо ли это вообще здесь? Может есть какие-нибудь материалы по алгоритмы работы промисов? Я уже посещал https://promisesaplus.com/, но "переварить" не могу этот текст |
Цитата:
|
innowed,
Наберите в поиске ютуба Основы ES6 #15.1: Знакомство с обещаниями - там у него три видоса есть про обещания. Вроде толково объясняет что и как. |
Цитата:
|
Насколько я понял в then мы как раз и определяем resolve,а в catch -reject.
|
короч странно, за прошедшие несколько дней я видел кучу всякого Г, но банальной реализации промиса тупо нету. Более менее вариант http://www.mattgreer.org/articles/pr...wicked-detail/ да и то на общем фоне уже подгорает у меня
|
Цитата:
|
Цитата:
|
Вот этот пример работает, все более менее понятно https://developer.mozilla.org/ru/doc...bjects/Promise
|
Цитата:
Вообщем, сейчас непонятно, как промис решает, что нужно выполнить - resolve или reject. Неужели тупо через try/catch |
Цитата:
resolve и reject это обычные функции обратного вызова. В примере Мозиллы они только resolve опрелелили,поэтому reject никогда не выполнится |
Извраты мастырят один на другой, вместо того, чтобы научить браузеры понимать фортран и паскаль, ну и си си.
ТС, resolve - это колбек на then, а режект - колбек на catch. Там же все проиллюстрировано. Просто ты мало боролся с асинхроном и мало кложей писал, поэтому не доходит. ))) |
Трудно объяснить, вот если есть цепочка
then().then().then().catch() то как в этом случае интерпретатор понимает, что then() выполнился и можно переходить к следующему или наоборот нужно перейти в catch() ? |
|
Часовой пояс GMT +3, время: 17:15. |