Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠŸΡƒΡ‚Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ JavaScript Promise для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для JavaScript-программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Β«PromiseΒ». ΠžΠ±Π΅Ρ‰Π°Π½ΠΈΡ (promises) Π² JavaScript – это Π½ΠΎΠ²Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ асинхронными вычислСниями, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² ECMAScript 2015 (6-я вСрсия ECMA-262).

Π”ΠΎ появлСния Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉΒ» асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ асинхронных Π·Π°Π΄Π°Ρ‡ – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий. МСнСС ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π°Π²ΠΎ Π½Π° сущСствованиС, способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависит ΠΎΡ‚ стоящСй ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉΒ», скорСС, ΠΏΡ€ΠΈΠ·Π²Π°Π½ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ функциями ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

Π’ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π΅ΡΡ‚ΡŒ сущСствСнный нСдостаток с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°: «callback hell«. Π­Ρ‚ΠΎΡ‚ нСдостаток Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° – ΠΈ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎ бСсконСчности.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠœΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Ρ‚Π°ΠΊΠΈΡ… влоТСнностСй. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ»ΠΎΡ…ΠΎΠΌΡƒ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈ запутанности ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкам. Π‘ Ρ‚Π°ΠΊΠΎΠΉ структурой ΠΊΠΎΠ΄Π° Π½Π°ΠΉΡ‚ΠΈ ошибки ΠΎΡ‡Π΅Π½ΡŒ слоТно.

Если всС ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивно Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, создавая ΠΈΡ… Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ€Π°Π±ΠΎΡ‚Ρƒ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉΒ» Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ:
ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ изобраТСния ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ списка.

Бписок прСдставляСт собой массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. НапримСр, для ΠΏΠΎΠΊΠ°Π·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² слайдСрС вашСй Π±Π°Π½Π½Π΅Ρ€Π½ΠΎΠΉ систСмы Π½Π° сайтС ΠΈΠ»ΠΈ асинхронной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„ΠΎΡ‚ΠΎΠ°Π»ΡŒΠ±ΠΎΠΌΠ΅.

Π‘Π½Π°Ρ‡Π°Π»Π° напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ url.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора new Promise(. ), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся анонимная функция с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ: resolve, reject. Они, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями. Resolve() β€” сообщаСт ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Β«ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΒ», reject() – ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ с «ошибкой» (Ρ‡Ρ‚ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ «ошибкой» ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ вашСго ΠΊΠΎΠ΄Π°, Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²Π°ΠΌ. Π­Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ if(true) <. >else <. >).

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Promise (ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅) прСдставляСт собой ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ для значСния, нСизвСстного Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания обСщания. Он позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ асинхронных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ синхронными: вмСсто ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° асинхронного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° возвращаСтся ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

ΠŸΡ€ΠΈ создании ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ находится Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ (состояниС pending), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ (fulfilled), Π²Π΅Ρ€Π½ΡƒΠ² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅), ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ (rejected), Π²Π΅Ρ€Π½ΡƒΠ² ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ΠΎΡ‚ΠΊΠ°Π·Π°.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ resolve() ΠΈ reject() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄ reject(), ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Error с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ошибки (Β«ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½ΠΎΠ³ΠΎΒ» состояния «обСщания»). Π’ любом случаС, это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. РСшСниС, ΠΊΠ°ΠΊ дальшС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ситуации – Π·Π° Π²Π°ΠΌΠΈ.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² этой ситуации. Пока ΠΌΡ‹ лишь устанавливаСм Π½Π΅ΠΊΠΈΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ Π»ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Однако вскорС Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ, ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚).

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ then() ΠΈ catch()

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β», становятся доступны Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: then() ΠΈ catch(). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ «обСщания» (resolve(. )) ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с «ошибкой» (reject(. )).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ (return) resolve(. ) ΠΈΠ»ΠΈ reject(. ):. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° myPromise() всС Ρ€Π°Π²Π½ΠΎ сработал Π±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ then() ΠΈΠ»ΠΈ catch(). Π›ΡƒΡ‡ΡˆΠ΅ всСго завСсти сразу ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ β€” всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ resolve(. ) ΠΈΠ»ΠΈ reject(. ). Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидаСтся.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ then() ΠΈ catch() ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π΄Π²Π΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Бинтаксис ΠΌΠ΅Ρ‚ΠΎΠ΄Π° then() Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Ρ‚Π°ΠΊΠΎΠΉ:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ function onSuccess()<> Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния «обСщания», function onFail()<> – Π² случаС ошибки. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ:

Π“ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Π΅Π΅ ΠΈ понятнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ catch(. ). Π’Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ catch() ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ «посСрСдинС» Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² then(), Ссли Π»ΠΎΠ³ΠΈΠΊΠ° вашСго ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚: then().catch().then().НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ catch() послСдним Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅: это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ всСгда ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Β«ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅Β» ситуации.

Π’Ρ‹Π·ΠΎΠ²Π΅ΠΌ наш ΠΌΠ΅Ρ‚ΠΎΠ΄ loadImage(url) ΠΈ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠ΄Π½Ρƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° страницу:

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рСкурсивная ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

НапишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ отобраТСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

Ѐункция displayImages(images) ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ массиву с url ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΡ‹ добавляСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° страницу ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ url Π² спискС. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ случаС – просто ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ url Π² спискС.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ отобраТСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ совсСм Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС. Если трСбуСтся ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с массивом Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉΒ».

Π’ массивС promiseImgs Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ находятся «обСщания», Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состояниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Β«Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎΒ» Ρ‚Π°ΠΊ ΠΈ Β«ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎΒ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ изобраТСния fake.jpg физичСски Π½Π΅ сущСствуСт.

Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Promise.all(. ).
Promise.all(iterable) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполнится послС выполнСния всСх ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅.

Однако Ρƒ нас Π² спискС Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ физичСски Π½Π΅ сущСствуСт. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Promise.all Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСльзя: Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» (resolved | rejected).

Если Π² массивС Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉΒ» Π΅ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Β«ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎΒ» (rejected), Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Promise.all Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Π΅Ρ€Π½Π΅Ρ‚ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» с Ρ‚Π°ΠΊΠΈΠΌ состояниСм, Π½Π΅ доТидаясь прохоТдСния ΠΏΠΎ всСму массиву.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ loadAndDisplayImages.

ΠŸΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ изобраТСния, ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ… Π½Π° страницС всС сразу

МоТно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ (для наглядности Π² Chrome Π±Ρ‹Π»Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° эмуляция ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ Wi-Fi (2ms, 30Mb/s, 15M/s):

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Π Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Promise, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с API ЯндСкс.ΠšΠ°Ρ€Ρ‚, ΠΈΠ»ΠΈ Service Worker – ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΌ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.

UPD: Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ ΠΎΠ·Π²ΡƒΡ‡ΠΈΠ» ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ, отчасти, Π±Ρ‹Π» связан совСт ΠΏΠΈΡΠ°Ρ‚ΡŒ return resolve() ΠΈΠ»ΠΈ return reject().

Когда Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» устанавливаСтся Π² своС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ состояниС Β«Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎΒ» ΠΈΠ»ΠΈ Β«ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎΒ», соотвСтствСнно. ПослС этого состояниС ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСльзя. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΠΌΠΈΡΡ‹: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Π¦Π΅ΠΏΠΎΡ‡ΠΊΠΈ промисов ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ошибок. Если промис Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² блиТайший ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

НСявный try…catch

Π’ΠΎΠΊΡ€ΡƒΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ промиса ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² находится «Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ try..catch «. Если происходит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ пСрСхватываСтся, ΠΈ промис считаСтся ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹ΠΌ с этой ошибкой.

…РаботаСт Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ этот:

«ΠΠ΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ try..catch » Π²ΠΎΠΊΡ€ΡƒΠ³ промиса автоматичСски ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Ρ‘ Π² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹ΠΉ промис.

ΠŸΡ€ΠΎΠ±Ρ€Π°ΡΡ‹Π²Π°Π½ΠΈΠ΅ ошибок

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ try..catch ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ дальшС, Ссли Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Ρ‘ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’ΠΎ ΠΆΠ΅ самоС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для промисов.

НСобработанныС ошибки

Π’ случаС ошибки Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠ΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ошибок. Но Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ошибка ΠΊΠ°ΠΊ Π±Ρ‹ «застрСваСт», Π΅Ρ‘ Π½Π΅ΠΊΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² ΠΊΠΎΠ΄Π΅, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло сильно Π½Π΅ Ρ‚Π°ΠΊ.

JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ отслСТиваСт Ρ‚Π°ΠΊΠΈΠ΅ ситуации ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π² этом случаС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Ρ‘ Π² консоли, Ссли запуститС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅.

Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ событиС unhandledrejection :

Π­Ρ‚ΠΎ событиС являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандарта HTML.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ошибки нСустранимы, поэтому Π»ΡƒΡ‡ΡˆΠ΅ всСго – ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ошибкС Π½Π° сСрвСр.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΠΌΠΈΡΡ‹

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ извСстный ΠΏΠ΅Π²Π΅Ρ†, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°Π½Π°Ρ‚Ρ‹ постоянно Π΄ΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ расспросами ΠΎ прСдстоящСм синглС.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Ρ‹ΡˆΠΊΡƒ, Π²Ρ‹ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚Π΅ Ρ€Π°Π·ΠΎΡΠ»Π°Ρ‚ΡŒ ΠΈΠΌ сингл, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½. Π’Ρ‹ Π΄Π°Ρ‘Ρ‚Π΅ Ρ„Π°Π½Π°Ρ‚Π°ΠΌ список, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ свой e-mail, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ пСсню, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½Π° Π²Ρ‹ΠΉΠ΄Π΅Ρ‚. И Π΄Π°ΠΆΠ΅ большС: Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² студии Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΆΠ°Ρ€ ΠΈ пСсню Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± этом.

ВсС счастливы! Π’Ρ‹ счастливы, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ вас большС Π½Π΅ Π΄ΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ„Π°Π½Π°Ρ‚Ρ‹, Π° Ρ„Π°Π½Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ большС Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ пропустят Π½ΠΎΠ²Ρ‹ΠΉ сингл.

Π­Ρ‚ΠΎ аналогия ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ для ситуаций, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ часто сталкиваСмся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ:

Аналогия Π½Π΅ совсСм Ρ‚ΠΎΡ‡Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Promise Π² JavaScript Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС простого списка подписок: ΠΎΠ½ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями ΠΈ ограничСниями. Но для Π½Π°Ρ‡Π°Π»Π° ΠΈ такая аналогия Ρ…ΠΎΡ€ΠΎΡˆΠ°.

Бинтаксис создания Promise :

Π•Ρ‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ resolve ΠΈ reject – это колбэки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт сам JavaScript. Наш ΠΊΠΎΠ΄ – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ исполнитСля.

Когда ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, сСйчас ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ – Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих колбэков:

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Ρƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ promise Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… состояний:

ПозТС ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Β«Ρ„Π°Π½Π°Ρ‚Ρ‹Β» ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΎΠ± этих измСнСниях.

НиТС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ конструктора Promise ΠΈ простого исполнитСля с ΠΊΠΎΠ΄ΠΎΠΌ, Π΄Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ (Ρ‡Π΅Ρ€Π΅Π· setTimeout ):

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ, запустив ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅:

Π­Ρ‚ΠΎ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Β«ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉΒ» промис.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ сообщит, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° с ошибкой:

ΠŸΡ€ΠΎΠΌΠΈΡ – ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ, ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Β«Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹ΠΌΒ», Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ промиса Β«Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈΒ».

ВсС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ resolve ΠΈ reject Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹:

ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π°, выполняСмая исполнитСлСм, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΡ‚ΠΎΠ³: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция resolve / reject ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ). ВсС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Ρƒ, Π½ΠΎ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ Π΅Ρ‘ ΡƒΠΆΠ΅ выполняли, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½.

ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ: then, catch, finally

НапримСр, Π²ΠΎΡ‚ рСакция Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ промис:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Руководство ΠΏΠΎ промисам для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Π² Π½ΠΈΡ… Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ

ЛСс Ρ‡ΡƒΠ΄Π΅Π½, Ρ‚Ρ‘ΠΌΠ΅Π½ β€” глянь Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ.
Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ я всС Π΄ΠΎΠ»Π³ΠΈ вСрну…
И ΠΌΠ½ΠΎΠ³ΠΎ миль, ΠΏΠΎΠΊΠ° я усну,
Π’Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ миль, ΠΏΠΎΠΊΠ° я усну.

Π ΠΎΠ±Π΅Ρ€Ρ‚ Ѐрост

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ β€” это ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π² ES6. JavaScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ². Однако ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΡ‹ сталкиваСмся с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… β€” Β«Π°Π΄ коллбэков» ΠΈ Β«ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π° уТаса». ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ β€” это ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JS. Асинхронный ΠΊΠΎΠ΄, написанный с использованиСм промисов, выглядит ΠΊΠ°ΠΊ синхронный ΠΈ Π»ΠΈΡˆΡ‘Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с коллбэками.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, посвящён промисам ΠΈ ΠΈΡ… практичСскому использованию. Он рассчитан Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ хочСтся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с промисами.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ промис?

Π’ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ промисов, Π΄Π°Π½Π½ΠΎΠ΅ ECMA: Β«ΠŸΡ€ΠΎΠΌΠΈΡ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΡ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ для Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… (ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ асинхронных) вычислСний.

ΠŸΡ€ΠΎΡ‰Π΅ говоря β€” промис (promise) β€” это ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ значСния. Π’ΡƒΡ‚ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ, говоря ΠΎ промисах, ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «обСщаниями» ΠΈ Β«ΠΎΠ±Π΅Ρ‰Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈΒ». Если Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‚ΠΎ это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ люди ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ слово Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» (promise) Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. НапримСр, Π²Ρ‹ Π·Π°Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ»Π΅Ρ‚ Π½Π° самолёт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Ρ‚ΠΈΡ‚ Π² Индию. Π’Π°ΠΌ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΊΡ€Π°ΡΠ½ΡƒΡŽ Π³ΠΎΡ€Π½ΡƒΡŽ ΡΡ‚Π°Π½Ρ†ΠΈΡŽ Π”Π°Ρ€Π΄ΠΆΠΈΠ»ΠΈΠ½Π³. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ бронирования Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π±ΠΈΠ»Π΅Ρ‚. Π­Ρ‚ΠΎ Π±ΠΈΠ»Π΅Ρ‚, ΠΏΠΎ сути, являСтся ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ΠΌ Π°Π²ΠΈΠ°ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ мСсто Π² самолётС Π² дСнь, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡƒΡ‚ΡŒ. Π’ Ρ†Π΅Π»ΠΎΠΌ, Π±ΠΈΠ»Π΅Ρ‚ β€” это ΠΌΠ΅ΡΡ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ значСния, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, для крСсла Π² самолётС.

Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’Ρ‹ ΠΏΠΎΠΎΠ±Π΅Ρ‰Π°Π»ΠΈ Π΄Ρ€ΡƒΠ³Ρƒ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€Π½Ρ‘Ρ‚Π΅ Π΅ΠΌΡƒ Π΅Π³ΠΎ ΠΊΠ½ΠΈΠ³Ρƒ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования» послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Ρ‘Ρ‚Π΅ Π΅Ρ‘. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠ΅ΡΡ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ β€” это ваши слова. А Β«Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Β» β€” это ΠΊΠ½ΠΈΠ³Π°.

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ситуации. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΎΠΉ Π²Ρ€Π°Ρ‡Π°, Π·Π°ΠΊΠ°Π· Π΅Π΄Ρ‹ Π² рСсторанС, Π²Ρ‹Π΄Π°Ρ‡Π° ΠΊΠ½ΠΈΠ³ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ВсС эти ситуации Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Π½Π΅ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ обСщания. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ достаточно простых ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², поэтому займёмся ΠΊΠΎΠ΄ΠΎΠΌ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ промисов

ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° нСльзя Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ трСбуСтся Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ»ΠΈ оТидаСтся, Ρ‡Ρ‚ΠΎ эта опСрация Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ. НапримСр β€” Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сСтСвого запроса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ 10 Π΄ΠΎ 200 мс, Ρ‡Ρ‚ΠΎ зависит ΠΎΡ‚ скорости соСдинСния. ΠœΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π² бСздСйствии ΠΆΠ΄Π°Ρ‚ΡŒ получСния этих Π΄Π°Π½Π½Ρ‹Ρ…. Для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° 200 мс β€” это ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ°Π»ΠΎ, Π½ΠΎ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° это вСсьма сущСствСнный ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция Math.random() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для гСнСрирования случайных чисСл. Π’ 90% случаСв, исходя ΠΈΠ· Ρ€Π°Π²Π½ΠΎΠΉ вСроятности Π²Ρ‹Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… случайных чисСл, промис Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½.

ИспользованиС промисов

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ промисов использовалась стратСгия Π»Π΅Π½ΠΈΠ²Ρ‹Ρ… вычислСний, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΈΡ… ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Об этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² промисах

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ это Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, с Ρ‚ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ промис Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½ с Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ Π² 90% ΠΈ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ 10% случаСв.

ОбъСдинСниС промисов Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ

Π˜Ρ‚ΠΎΠ³ΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ, Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎ, ΠΎ Ρ‡Ρ‘ΠΌ шла Ρ€Π΅Ρ‡ΡŒ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ промисы, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, основанных Π½Π° коллбэках, Π² Π²ΠΈΠ΄Π΅ промисов. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Node.js, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² fs ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях основаны Π½Π° коллбэках. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ автоматичСски ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² конструкции, основанныС Π½Π° промисах. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, это util.promisify ΠΈΠ· Node.js, ΠΈ pify.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Как Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ асинхронный ΠΊΠΎΠ΄ Π½Π° JavaScript?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ИспользованиС промисов Π² JavaScript

ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ использования промисов Π² JavaScript.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΊ промисам ΠΏΡ€ΠΈΠΊΠΎΠ²Π°Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ внимания? ПолагаСм, всё Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ тСхнология эта вСсьма вострСбована, ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ достаточно слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ промисы, ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, посвящённой этой Ρ‚Π΅ΠΌΠ΅. Π•Ρ‘ Π°Π²Ρ‚ΠΎΡ€ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ послСдниС 10 Π»Π΅Ρ‚ занимался Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π° Java ΠΈ PHP, Π½ΠΎ всё это врСмя с интСрСсом поглядывал Π½Π° JavaScript. НСдавно ΠΎΠ½ Ρ€Π΅ΡˆΠΈΠ» Π²ΡΠ΅Ρ€ΡŒΡ‘Π· Π·Π°Π½ΡΡ‚ΡŒΡΡ JS ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π²ΡˆΠ΅ΠΉ Π΅Π³ΠΎ Ρ‚Π΅ΠΌΠΎΠΉ стали промисы.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ интСрСсСн Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ, хотя ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ промисами, ΠΏΠΎΠΊΠ° нСдостаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡ… ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ рассказ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ смотрит Π½Π° JavaScript свСТим взглядом ΠΈ стрСмится ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ понял сам, Π½Π΅ считая, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π²Π΅Ρ‰ΠΈ понятны всСм ΠΈ Π±Π΅Π· объяснСний, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Π² Π΄Π΅Π»Π΅ освоСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² JavaScript.

JavaScript Π³Π»Π°Π·Π°ΠΌΠΈ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°

Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° JavaScript, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сСбя, Ρ‡Ρ‚ΠΎ называСтся, Β«Π½Π΅ Π² своСй Ρ‚Π°Ρ€Π΅Π»ΠΊΠ΅Β». Одни говорят, Ρ‡Ρ‚ΠΎ JS β€” это синхронный язык программирования, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ β€” асинхронный. Новичок ΡΠ»Ρ‹ΡˆΠΈΡ‚ ΠΎ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈ ΠΎ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚, ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… проСктирования, основанных Π½Π° событиях, ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ событий, ΠΎ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ± ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ событий ΠΈ ΠΎΠ± ΠΈΡ… всплытии, ΠΎ ΠΏΠΎΠ»ΠΈΡ„ΠΈΠ»Π»Π°Ρ…. Он ΡƒΠ·Π½Π°Ρ‘Ρ‚, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΡˆΡ‚ΡƒΠΊΠΈ, ΠΊΠ°ΠΊ Babel, Angular, React, Vue ΠΈ ΠΌΠΈΡ€ΠΈΠ°Π΄Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠ·Π½Π°Π»ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΎΡ‚ Β«Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ΅Β» сСбя β€” Π½Π΅ стоит ΠΈΠ·-Π·Π° этого Π²ΠΎΠ»Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Ρ‹ β€” Π½Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Π½Π΅ послСдний. Π•ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этого β€” Ρ‚Π°ΠΊ называСмая Β«JavaScript-ΡƒΡΡ‚Π°Π»ΠΎΡΡ‚ΡŒΒ» (JavaScript fatigue). По этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΊΠΎ высказался Лукас Π€ ΠšΠΎΡΡ‚Π°: Β«JavaScript-ΡƒΡΡ‚Π°Π»ΠΎΡΡ‚ΡŒ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° люди ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚Β».

Но Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎ грустном. Π˜Ρ‚Π°ΠΊ, JavaScript β€” это синхронный язык программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, благодаря ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ коллбэков, позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это дСлаСтся Π² асинхронных языках.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ рассказ ΠΎ промисах

Π‘Π»ΠΎΠ²ΠΎ Β«promiseΒ» пСрСводится ΠΊΠ°ΠΊ Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β». Promise-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ «промисами», ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ обСщания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ люди Π΄Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚Π°ΠΊΠΈΡ… Π²ΠΎΡ‚ обСщаниях.

Π’ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ слова Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β»: Β«ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, согласиС ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒΒ». Π’ словарС ОТСгова Β«ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Β» β€” это Β«Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒΒ».

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎΠ± обСщаниях?

ΠŸΡ€ΠΎΠΌΠΈΡΡ‹ Π² JavaScript

Π£ мСня Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: занимаясь JavaScript, я всСгда Ρ‡ΠΈΡ‚Π°ΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° MDN. МнС каТСтся, Ρ‡Ρ‚ΠΎ этот рСсурс Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ отличаСтся ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ‡Ρ‘Ρ‚ΠΊΠΎΡΡ‚ΡŒΡŽ излоТСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, изучая промисы, я ознакомился с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ ΠΈ поэкспСримСнтировал с ΠΊΠΎΠ΄ΠΎΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ Π½ΠΎΠ²Ρ‹ΠΌ для сСбя синтаксичСским конструкциям.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ промисы, Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с двумя основными Π²Π΅Ρ‰Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ β€” это созданиС промисов. Вторая β€” ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… промисами. Π₯отя большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с промисами, создаваСмыми, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ промисов, Π±Π΅Π· сомнСния, окаТСтся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, программисту, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚, Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ промисы, Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ промисов

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ промисы:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π² ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ промисы, создадим простой промис для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎ всём Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ этот ΠΊΠΎΠ΄:

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Π£ промиса Π΅ΡΡ‚ΡŒ состояниС (PromiseStatus) ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (PromiseValue)

Π’ этом ΠΊΠΎΠ΄Π΅ создаётся промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ бСзусловно Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· 10 сСкунд. Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° состояниС Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ промиса.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠŸΡ€ΠΎΠΌΠΈΡ, Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· 10 сСкунд ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ВзглянСм Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π° ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ. Для этого ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ использовался Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ отклонСния промиса, Π² консоли Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (Ρ‚ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Google Chrome), Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС ΠΎΠ± ошибкС. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом Π½ΠΈΠΆΠ΅.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Promise

Π’ соотвСтствии с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ MDN, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Promise прСдставляСт собой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

β–ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Promise

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами
Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ промиса (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ взято ΠΎΡ‚ΡΡŽΠ΄Π°)

Π’ΠΎΡ‚ нСбольшая история. Π’Ρ‹ β€” школьник ΠΈ проситС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваша ΠΌΠ°ΠΌΠ° ΠΊΡƒΠΏΠΈΠ»Π° Π²Π°ΠΌ мобильник. Она Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: «Если наши сбСрСТСния Π±ΡƒΠ΄ΡƒΡ‚ большС, Ρ‡Π΅ΠΌ стоит Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, я Π΅Π³ΠΎ Ρ‚Π΅Π±Π΅ ΠΊΡƒΠΏΠ»ΡŽΒ». Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСскаТСм эту ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ языком JavaScript.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ этот ΠΊΠΎΠ΄:

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Мама Π½Π΅ сдСрТала ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅

Если ΠΆΠ΅ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ momsSavings Π½Π° 200000, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠ°ΠΌΠ° смоТСт ΠΊΡƒΠΏΠΈΡ‚ΡŒ сыну ΠΏΠΎΠ΄Π°Ρ€ΠΎΠΊ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Мама Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ этот ΠΊΠΎΠ΄ Π² консоли Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹Π΅ промисы. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ мноТСство промисов ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΡ… выполнСния, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ.

▍БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Promise

Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ промис ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². НапримСр, Π½Π° основС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π² консоль Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°:

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

β–ΠœΠ΅Ρ‚ΠΎΠ΄ Promise.all

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1

Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ всС промисы. Π’Π°ΠΊΠΎΠΉ сцСнарий встрСчаСтся Ρ‡Π°Ρ‰Π΅ всСго.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π² консоль:

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ВсС промисы Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… наблюдСния.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ промис, Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ 2 сСкунды, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΎΠΌ, порядок промисов Π² массивС сохраняСтся.

Если Π±Ρ‹ промисы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ врСмя выполнСния этой инструкции составило Π±Ρ‹ 7 сСкунд (1+4+2). Однако Ρ‚Π°ΠΉΠΌΠ΅Ρ€ сообщаСт Π½Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вся эта опСрация заняла, Ссли ΠΎΠΊΡ€ΡƒΠ³Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, 4 сСкунды. Π­Ρ‚ΠΎ являСтся Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всС промисы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€β„– 2

Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄ сформируСт этот ΠΊΠΎΠ΄:

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Π’Ρ‹Π·ΠΎΠ² Promise.all с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ массива, Π½Π΅ содСрТащСго промисов

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² массивС Π½Π΅Ρ‚ промисов, Promise.all ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–3

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Promise.all останавливаСтся послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½ΠΎΠ³ΠΎ промиса с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ этот промис.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ останавливаСтся послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½ΠΎΠ³ΠΎ промиса

β–ΠœΠ΅Ρ‚ΠΎΠ΄ Promise.race

MDN сообщаСт, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Promise.race(iterable) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹ΠΉ промис со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ отклонСния, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… промисов Π±ΡƒΠ΄Π΅Ρ‚, соотвСтствСнно, Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² консоль послС выполнСния этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠŸΡ€ΠΎΠΌΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΡΡ быстрСС всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–2

Π’ консоль, послС выполнСния этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами. Π€ΠΎΡ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ then послС catch ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами

ΠŸΡ€ΠΎΠΌΠΈΡ, ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π°Π½ΡŒΡˆΠ΅ всСх

ΠžΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ экспСримСнты

Π― собрал всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассматривали Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅, Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ с Π½ΠΈΠΌΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сцСнарии Ρ€Π°Π±ΠΎΡ‚Ρ‹ с промисами. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ рассчитан Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, поэтому Ρ‚ΡƒΡ‚ ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ API, Π½Π΅ обращаСмся ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ опСрациям, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π₯отя всё это Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², полагаю, Ρ€Π°Π±ΠΎΡ‚Π° с этими ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π²Π»Π΅Ρ‡ΡŒ нас ΠΎΡ‚ нашСй Π³Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ β€” промисов. А использованиС простых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈ Π½Π΅ обрСмСняСт нас Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ дСталями.

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ список ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с промисами для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Π‘ΠΊΠ°ΠΆΠΈΡ‚Π΅, испытывали Π»ΠΈ Π²Ρ‹ слоТности с освоСниСм промисов, ΠΊΠΎΠ³Π΄Π° Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ с Π½ΠΈΠΌΠΈ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ?

ΠŸΡ€ΠΎΠΌΠΎ-ΠΊΠΎΠ΄ Π½Π° скидку Π² 10% Π½Π° наши Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ сСрвСра:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *