Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Промисы (понимание, имплеметация) (https://javascript.ru/forum/misc/64161-promisy-ponimanie-implemetaciya.html)

innowed 23.07.2016 13:49

Промисы (понимание, имплеметация)
 
Здравствуйте! Пытаясь понять вроде бы несложную тему промисов, заодно пробую самостоятельно реализовать минимальное 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 23.07.2016 15:08

Цитата:

Сообщение от Rise (Сообщение 423156)
innowed, здесь в Учебнике не смотрел или ты не знаешь о нем?

это первое место, где я смотрел

Bond 24.07.2016 12:22

innowed,
Наберите в поиске ютуба Основы ES6 #15.1: Знакомство с обещаниями - там у него три видоса есть про обещания. Вроде толково объясняет что и как.

innowed 24.07.2016 13:21

Цитата:

Сообщение от Bond (Сообщение 423227)
innowed,
Наберите в поиске ютуба Основы ES6 #15.1: Знакомство с обещаниями - там у него три видоса есть про обещания. Вроде толково объясняет что и как.

давно смотрел эти уроки, там рассказано как пользоваться, а за счёт чего работает, я суть не смог выловить :(

vadim5june 24.07.2016 14:54

Насколько я понял в then мы как раз и определяем resolve,а в catch -reject.

innowed 24.07.2016 19:12

короч странно, за прошедшие несколько дней я видел кучу всякого Г, но банальной реализации промиса тупо нету. Более менее вариант http://www.mattgreer.org/articles/pr...wicked-detail/ да и то на общем фоне уже подгорает у меня

vadim5june 24.07.2016 20:44

Цитата:

Сообщение от innowed
о банальной реализации промиса тупо нету.

Он в браузерах нативным способом же реализован

innowed 24.07.2016 21:00

Цитата:

Сообщение от vadim5june (Сообщение 423254)
Он в браузерах нативным способом же реализован

да

vadim5june 24.07.2016 21:06

Вот этот пример работает, все более менее понятно https://developer.mozilla.org/ru/doc...bjects/Promise

innowed 25.07.2016 08:44

Цитата:

Сообщение от vadim5june (Сообщение 423257)
Вот этот пример работает, все более менее понятно https://developer.mozilla.org/ru/doc...bjects/Promise

у меня этот пример даже не запустился даже)

Вообщем, сейчас непонятно, как промис решает, что нужно выполнить - resolve или reject. Неужели тупо через try/catch


Часовой пояс GMT +3, время: 15:50.