Асинхронный JavaScript: ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ Async/Await, Callbacks ΠΈ Promises

РассказываСм, ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Async/Await Π½Π° JavaScript. Π’Π°ΠΊΠΆΠ΅ объясняСм, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Callbacks ΠΈ Promises.

ОблоТка: Асинхронный JavaScript: ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ Async/Await, Callbacks ΠΈ Promises

БСгодня ΠΌΡ‹ попытаСмся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ этом ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ асинхронный JavaScript. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  1. Callbacks.
  2. Promises.
  3. Async / Await.

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрим Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅:

  1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронный JavaScript.
  2. Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ ΠΈ асинхронный JavaScript.
  3. Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Callbacks Π² JavaScript.
  4. Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Promises Π² JavaScript.
  5. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Async / Await Π² JavaScript.

Π­Ρ‚ΠΎ β€” ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π° freeCodeCamp ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° Joy Shaheb.

Π•Ρ‰Ρ‘ Ρƒ нас Π΅ΡΡ‚ΡŒ видСовСрсия ΡƒΡ€ΠΎΠΊΠ° ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° (остороТно, английский язык):

ΠŸΡ€Π΅Π²ΡŒΡŽ Π²ΠΈΠ΄Π΅ΠΎ n5ZtTO1ArWg

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ!

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронный JavaScript

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эффСктивныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΎ эта концСпция идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π²Π°ΠΌ.

ВСория асинхронного JavaScript ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ большиС слоТныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· этих Ρ‚Ρ€Π΅Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ – Callbacks, Promises ΠΈΠ»ΠΈ Async/await – для выполнСния Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ ΠΈ асинхронный JavaScript

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ синхронная систСма

Π’ синхронной систСмС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас всСго ΠΎΠ΄Π½Π° Ρ€ΡƒΠΊΠ° для выполнСния 10 Π·Π°Π΄Π°Ρ‡. Из-Π·Π° этого Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° GIF, здСсь происходит ΠΎΠ΄Π½ΠΎ дСйствиС Π·Π° Ρ€Π°Π·:

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ загрузится ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ‡Π½Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ JavaScript являСтся синхронным ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом Ρ‚Π°ΠΊ: ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ Ρ€ΡƒΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ асинхронная систСма

Π’ этой систСмС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ для выполнСния 10 Π·Π°Π΄Π°Ρ‡ Ρƒ вас Π΅ΡΡ‚ΡŒ 10 Ρ€ΡƒΠΊ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, каТдая Ρ€ΡƒΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° GIF. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ загруТаСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ВсС изобраТСния Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² своСм собствСнном Ρ‚Π΅ΠΌΠΏΠ΅. Ни ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΆΠ΄Ρ‘Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….

Π˜Ρ‚Π°ΠΊ, Π² Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ синхронным ΠΈ асинхронным JS

Π’ синхронной систСмС изобраТСния находятся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Одно ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠ³Π½Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Если ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, останавливаСтся ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’ асинхронной систСмС изобраТСния находятся Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ…. Они Π·Π°ΠΊΠΎΠ½Ρ‡Π°Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π² своСм собствСнном Ρ‚Π΅ΠΌΠΏΠ΅. Никто Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ΅ΠΌ Π½Π΅ останавливаСтся, Ссли Π²Π΄Ρ€ΡƒΠ³ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ синхронного ΠΈ асинхронного ΠΊΠΎΠ΄Π°

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ синхронного ΠΊΠΎΠ΄Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ систСму, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ этот ΠΊΠΎΠ΄ Π½Π° JavaScript:

			console.log(" I ");

console.log(" eat ");

console.log(" Ice Cream ");
		

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² консоли:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ асинхронного ΠΊΠΎΠ΄Π°

Допустим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡŠΠ΅ΡΡ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅, трСбуСтся Π΄Π²Π΅ сСкунды. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ протСстируСм Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ систСму. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π½Π° JavaScript.

			console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
		

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setTimeout() ΠΌΡ‹ обсудим ΠΏΠΎΠ·ΠΆΠ΅.

И Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² консоли:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ синхронными ΠΈ асинхронными опСрациями, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим наш ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ.

Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Codepen.io ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ‚ΡŒ. Или Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² VS code ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€Ρƒ.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» JavaScript, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ консоль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ΠœΡ‹ напишСм наш ΠΊΠΎΠ΄ ΠΈ посмотрим Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² консоли.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π² JavaScript

Когда Π²Ρ‹ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, это называСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈΠ»ΠΈ callback.

Π’ΠΎΡ‚ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°:

НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ слоТной Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΡ‹ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ Π΅Π΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ шаги. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ этими шагами ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ΠΈ порядку, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹.

ВзглянитС Π½Π° этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ΠΎΡ‚ Ρ‚Π΅ нСбольшиС шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ порядок дСйствий ΠΈ врСмя ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π½Π°Ρ€Π΅Π·Π°Ρ‚ΡŒ Ρ„Ρ€ΡƒΠΊΡ‚Ρ‹ ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅.

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Ссли ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ шаг Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ.

Магазин Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… частСй:

  1. Π’ ΠΊΠ»Π°Π΄ΠΎΠ²ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ всС ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ [БэкСнд].
  2. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π° нашСй ΠΊΡƒΡ…Π½Π΅ [Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄].

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΈ сохраняСм Π΄Π°Π½Π½Ρ‹Π΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим наши ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„Ρ€ΡƒΠΊΡ‚Ρ‹, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

			let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
		

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ наши ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ Π²Π°Ρ„Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ стаканчиками, Ρ‚ΠΎΠΏΠΏΠΈΠ½Π³Π°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ:

			let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
		

Π’Π΅ΡΡŒ бизнСс зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π°ΠΊΠ°Π·, ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ производство, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Π°Π΅ΠΌ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ создадим Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. order;
  2. production.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ всС это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π°ΠΊΠ°Π·, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹, Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π·Π°ΠΊΠ°Π· ΠΈ ΠΎΡ‚Π΄Π°Ρ‘ΠΌ Π΅Π³ΠΎ. 

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стрСлочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

			let order = () =>{};

let production = () =>{};
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ установим связь ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя функциями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

			let order = (call_production) =>{

  call_production();
};

let production = () =>{};
		

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ нСбольшой тСст

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ console.log() для провСдСния тСстов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ всС сомнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ установили связь ΠΌΠ΅ΠΆΠ΄Ρƒ двумя функциями.

			let order = (call_production) =>{

console.log("Order placed. Please call production")

// function ???? is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
		

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСст, ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ order. И Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ production.

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² нашСй консоли:

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ этот ΠΊΠΎΠ΄ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ всС, Π½ΠΎ Π½Π΅ удаляйтС Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ stocks.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π· с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ„Ρ€ΡƒΠΊΡ‚Π°:

			// Function 1

let order = (fruit_name, call_production) =>{

  call_production();
};

// Function 2

let production = () =>{};


// Trigger ????

order("", production);
		

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов ΠΈ Π½ΡƒΠΆΠ½ΠΎΠ΅ врСмя для ΠΈΡ… выполнСния.

На этой схСмС Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ шаг 1 – Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 сСкунды. Π—Π°Ρ‚Π΅ΠΌ шаг 2 – Π½Π°Ρ€Π΅Π·Π°Ρ‚ΡŒ Ρ„Ρ€ΡƒΠΊΡ‚Ρ‹ (2 сСкунды), шаг 3 – Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ΄Ρƒ ΠΈ Π»Π΅Π΄ (1 сСкунда), шаг 4 – Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ (1 сСкунда), шаг 5 – Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (2 сСкунды), шаг 6 – Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π°Ρ‡ΠΈΠ½ΠΊΡƒ (3 сСкунды) ΠΈ шаг 7 – ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 сСкунды.

Для опрСдСлСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ функция setTimeout(), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ callback, принимая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ наши Ρ„Ρ€ΡƒΠΊΡ‚Ρ‹ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

			// 1st Function

let order = (fruit_name, call_production) =>{

  setTimeout(function(){

    console.log(`${stocks.Fruits[fruit_name]} was selected`)

// Order placed. Call production to start
   call_production();
  },2000)
};

// 2nd Function

let production = () =>{
  // blank for now
};

// Trigger ????
order(0, production);
		

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² консоли. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ отобраТаСтся Ρ‡Π΅Ρ€Π΅Π· 2 сСкунды.

Если Π²Π°ΠΌ интСрСсно, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ»ΡƒΠ±Π½ΠΈΠΊΡƒ, Π²ΠΎΡ‚ ΠΊΠΎΠ΄ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ:

НичСго Π½Π΅ удаляйтС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для производства ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ. ΠœΡ‹ ΠΎΠΏΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стрСлочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

			let production = () =>{

  setTimeout(()=>{
    console.log("production has started")
  },0000)

};
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² setTimeout, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€Π΅Π·Π°Ρ‚ΡŒ Ρ„Ρ€ΡƒΠΊΡ‚Ρ‹.

			let production = () =>{
  
  setTimeout(()=>{
    console.log("production has started")


    setTimeout(()=>{
      console.log("The fruit has been chopped")
    },2000)


  },0000)
};
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ процСсс производства ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ, Π²Π»ΠΎΠΆΠΈΠ² Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ – это ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅?

			let production = () =>{

  setTimeout(()=>{
    console.log("production has started")
    setTimeout(()=>{
      console.log("The fruit has been chopped")
      setTimeout(()=>{
        console.log(`${stocks.liquid[0]} and ${stocks.liquid[1]} Added`)
        setTimeout(()=>{
          console.log("start the machine")
          setTimeout(()=>{
            console.log(`Ice cream placed on ${stocks.holder[1]}`)
            setTimeout(()=>{
              console.log(`${stocks.toppings[0]} as toppings`)
              setTimeout(()=>{
                console.log("serve Ice cream")
              },2000)
            },3000)
          },2000)
        },1000)
      },1000)
    },2000)
  },0000)

};
		

Π‘ΠΌΡƒΡ‰Π΅Π½Ρ‹ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ всё выглядит? Π­Ρ‚ΠΎ Π°Π΄ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ? Они всСгда выглядят ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Как ΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ выглядСл красивым?

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Promises, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π°Π΄Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°

Promises Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Ρ‹ для избавлСния ΠΎΡ‚ Π°Π΄Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Π’ΠΎΡ‚, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят:

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… Π²Ρ‹ΡˆΠ΅, promise ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ состояния:

  1. ОТиданиС. Π­Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ стадия. Π—Π΄Π΅ΡΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом Ρ‚Π°ΠΊ: ваш ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ торопится Π΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°ΠΊΠ°Π·. Он Π΅Ρ‰Ρ‘ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°ΠΊΠ°Π·Π°Π».
  2. РСшСно. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваш ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» свою Π΅Π΄Ρƒ ΠΈ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½.
  3. ΠžΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваш ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» свой Π·Π°ΠΊΠ°Π· ΠΈ ΠΏΠΎΠΊΠΈΠ½ΡƒΠ» рСсторан.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ обСщания Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с производством ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π΅Ρ‰ΠΈ:

  1. Π’Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ.
  2. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Promise.
  3. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок.
  4. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ .finally

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· этих ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, дСлая нСбольшиС шаги.

Π’Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ

Если Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, это наши шаги ΠΈ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ шаг, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² JavaScript:

			let is_shop_open = true;
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создайтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ order ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΅ΠΉ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ time, work:

			let order = ( time, work ) =>{

  }
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ (Promise) Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ: β€œΠœΡ‹ ΠΏΠΎΠ΄Π°Π΄ΠΈΠΌ Π²Π°ΠΌ мороТСноС”:

			let order = ( time, work ) =>{

  return new Promise( ( resolve, reject )=>{ } )

  }
		

НашС ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ состоит ΠΈΠ· 2 частСй:

  1. РСшСно [ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅ доставлСно].
  2. ΠžΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ [ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅].

Π’ΠΎ Π΅ΡΡ‚ΡŒ Promise состоит ΠΈΠ· Resolve ΠΈ Reject.

			let order = ( time, work ) => {

  return new Promise( ( resolve, reject )=>{

    if( is_shop_open ){

      resolve( )

    }

    else{

      reject( console.log("Our shop is closed") )

    }

  })
}
		

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ коэффициСнты Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ нашСго promise с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setTimeout() Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΈ Π±Π΅Π· Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

			let order = ( time, work ) => {

  return new Promise( ( resolve, reject )=>{

    if( is_shop_open ){

      setTimeout(()=>{

       // work is ???? getting done here
        resolve( work() )

// Setting ???? time here for 1 work
       }, time)

    }

    else{
      reject( console.log("Our shop is closed") )
    }

  })
}
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для запуска производства.

			// Set ???? time here
order( 2000, ()=>console.log(`${stocks.Fruits[0]} was selected`))
//    pass a ☝️ function here to start working
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ послС Π΄Π²ΡƒΡ… сСкунд оТидания:

Π¦Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ

Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΡ‹ опрСдСляСм, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° пСрвая Π·Π°Π΄Π°Ρ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ .then.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ .then Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ promise, ΠΊΠΎΠ³Π΄Π° нашС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ.

Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π΄Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ инструкции. Π’Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ: β€œΠ‘Π½Π°Ρ‡Π°Π»Π° сдСлай это, ΠΏΠΎΡ‚ΠΎΠΌ сдСлай Ρ‚ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, потом…, потом…, потом…”, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

  1. ΠŸΠ΅Ρ€Π²Π°Ρ Π·Π°Π΄Π°Ρ‡Π° – это ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Promise.
  2. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ нашС ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΎΠ΄Π½Π° нСбольшая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ это Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ слово return Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° .then. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Если Π²Π°ΠΌ интСрСсно, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ return, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ всС шаги:

			order(2000,()=>console.log(`${stocks.Fruits[0]} was selected`))

.then(()=>{
  return order(0000,()=>console.log('production has started'))
})
		

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρƒ ΠΆΠ΅ систСму, Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

			// step 1
order(2000,()=>console.log(`${stocks.Fruits[0]} was selected`))

// step 2
.then(()=>{
  return order(0000,()=>console.log('production has started'))
})

// step 3
.then(()=>{
  return order(2000, ()=>console.log("Fruit has been chopped"))
})

// step 4
.then(()=>{
  return order(1000, ()=>console.log(`${stocks.liquid[0]} and ${stocks.liquid[1]} added`))
})

// step 5
.then(()=>{
  return order(1000, ()=>console.log("start the machine"))
})

// step 6
.then(()=>{
  return order(2000, ()=>console.log(`ice cream placed on ${stocks.holder[1]}`))
})

// step 7
.then(()=>{
  return order(3000, ()=>console.log(`${stocks.toppings[0]} as toppings`))
})

// Step 8
.then(()=>{
  return order(2000, ()=>console.log("Serve Ice Cream"))
})
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Нам Π½ΡƒΠΆΠ΅Π½ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ ошибки, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° false.

			let is_shop_open = false;
		

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наш ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π·Π°ΠΊΡ€Ρ‹Ρ‚. ΠœΡ‹ большС Π½Π΅ ΠΏΡ€ΠΎΠ΄Π°Π΅ΠΌ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ΅ нашим ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ошибкой, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ .catch. Как ΠΈ .then, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Promise, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли нашС ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ.

Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ:

  1. .then Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Promise сработал ΠΊΠ°ΠΊ слСдуСт.
  2. .catch Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Promise ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ .then ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ .catch Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ.

			.catch(()=>{
  console.log("Customer left")
})
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹Π²ΠΎΠ΄ послС исполнСния ΠΊΠΎΠ΄Π°:

  1. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ сообщСниС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ части reject() нашСго Promise.
  2. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ сообщСниС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° .catch.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ .finally()

БущСствуСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ finally, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π» Π»ΠΈ наш Promise Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½.

НапримСр: нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, обслуТили Π»ΠΈ ΠΌΡ‹ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ»ΠΈ 100 ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², наш ΠΌΠ°Π³Π°Π·ΠΈΠ½ закроСтся Π² ΠΊΠΎΠ½Ρ†Π΅ дня.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

			.finally(()=>{
  console.log("end of day")
})
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Async / Await Π² JavaScript

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это Π»ΡƒΡ‡ΡˆΠΈΠΉ способ написания Promise, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ простым ΠΈ чистым.

ВсС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ слово async ΠΏΠ΅Ρ€Π΅Π΄ любой ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΈ ΠΎΠ½Π° станСт ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ΠΌ.

Promises ΠΏΡ€ΠΎΡ‚ΠΈΠ² Async/Await Π½Π° JavaScript

Π”ΠΎ появлСния async/await для выполнСния обСщания ΠΌΡ‹ писали ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

			function order(){
   return new Promise( (resolve, reject) =>{

    // Write code here
   } )
}
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ async:

			//???? the magical keyword
 async function order() {
    // Write code here
 }
		

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Try ΠΈ Catch

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ try для выполнСния ΠΊΠΎΠ΄Π°, Π° catch – для ΠΎΡ‚Π»ΠΎΠ²Π° ошибок. Π­Ρ‚ΠΎ Ρ‚Π° ΠΆΠ΅ концСпция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ рассмотрСнии ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ сравним, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’ обСщаниях ΠΌΡ‹ использовали resolve ΠΈ reject:

			function kitchen(){

  return new Promise ((resolve, reject)=>{
    if(true){
       resolve("promise is fulfilled")
    }

    else{
        reject("error caught here")
    }
  })
}

kitchen()  // run the code
.then()    // next step
.then()    // next step
.catch()   // error caught here
.finally() // end of the promise [optional]
		

Когда ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ async/await, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

			//???? Magical keyword
async function kitchen(){

   try{
// Let's create a fake problem      
      await abc;
   }

   catch(error){
      console.log("abc does not exist", error)
   }

   finally{
      console.log("Runs code anyways")
   }
}

kitchen()  // run the code
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, надССмся, Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Promises ΠΈ Async/Await.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Await Π² JavaScript

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово await заставляСт JavaScript ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Promise выполнится ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρƒ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ. ΠœΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΠΏΠΏΠΈΠ½Π³ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŒ: шоколад ΠΈΠ»ΠΈ арахис. Нам Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΈ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‡Π΅Π³ΠΎ Π±Ρ‹ ΠΎΠ½ Ρ…ΠΎΡ‚Π΅Π».

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ остановили Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡƒΡ…Π½ΡŽ, Π½ΠΎ пСрсонал Π²Π½Π΅ ΠΊΡƒΡ…Π½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ:

  1. ΠΌΡ‹Ρ‚ΡŒΠ΅ посуды;
  2. ΡƒΠ±ΠΎΡ€ΠΊΠ° столов;
  3. ΠΏΡ€ΠΈΡ‘ΠΌ Π·Π°ΠΊΠ°Π·ΠΎΠ², ΠΈ Ρ‚.Π΄.

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Promise, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΠΏΠΏΠΈΠ½Π³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ сСкунды.

			function toppings_choice (){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{

      resolve( console.log("which topping would you love?") )

    },3000)
  })
}
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала создадим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΊΡƒΡ…Π½ΠΈ с async.

			async function kitchen(){

  console.log("A")
  console.log("B")
  console.log("C")
  
  await toppings_choice()
  
  console.log("D")
  console.log("E")

}

// Trigger the function

kitchen();
		

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½ΠΈΠΆΠ΅ kitchen().

			console.log("doing the dishes")
console.log("cleaning the tables")
console.log("taking orders")
		

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠœΡ‹ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΊΡƒΡ…Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: β€œΠšΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΠΏΠΏΠΈΠ½Π³ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅?”. Π’ это врСмя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ‚ΠΎΠΏΠΏΠΈΠ½Π³Π°, ΠΌΡ‹ возвращаСмся Π½Π° ΠΊΡƒΡ…Π½ΡŽ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π°ΠΊΠ°Π·.

ΠŸΡ€ΠΈ использовании Async/Await Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ .then, .catch ΠΈ .finally, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основной Ρ‡Π°ΡΡ‚ΡŒΡŽ Promises.

ЗапускаСм ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ

Для этого создадим Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. kitchen для приготовлСния ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎΠ³ΠΎ;
  2. time для назначСния количСства Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΉΠΌΠ΅Ρ‚ каТдая нСбольшая Π·Π°Π΄Π°Ρ‡Π°.

Π‘Π½Π°Ρ‡Π°Π»Π° создадим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ time:

			let is_shop_open = true;

function time(ms) {

   return new Promise( (resolve, reject) => {

      if(is_shop_open){
         setTimeout(resolve,ms);
      }

      else{
         reject(console.log("Shop is closed"))
      }
    });
}
		

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΊΡƒΡ…Π½ΡŽ:

			async function kitchen(){
   try{

     // instruction here
   }

   catch(error){
    // error management here
   }
}

// Trigger
kitchen();
		

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ наша кухня:

			async function kitchen(){
   try{

// time taken to perform this 1 task
     await time(2000)
     console.log(`${stocks.Fruits[0]} was selected`)
   }

   catch(error){
     console.log("Customer left", error)
   }

   finally{
      console.log("Day ended, shop closed")
    }
}

// Trigger
kitchen();
		

Π’ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ссли ΠΌΠ°Π³Π°Π·ΠΈΠ½ считаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ:

А Π²ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π·Π°ΠΊΡ€Ρ‹Ρ‚.

Π—Π°Π²Π΅Ρ€ΡˆΠΈΠΌ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Для этого вспомним, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅:

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ°Π³Π°Π·ΠΈΠ½:

			let is_shop_open = true;
		

ДобавляСм всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для нашСй ΠΊΡƒΡ…Π½ΠΈ:

			async function kitchen(){
    try{
	await time(2000)
	console.log(`${stocks.Fruits[0]} was selected`)

	await time(0000)
	console.log("production has started")

	await time(2000)
	console.log("fruit has been chopped")

	await time(1000)
	console.log(`${stocks.liquid[0]} and ${stocks.liquid[1]} added`)

	await time(1000)
	console.log("start the machine")

	await time(2000)
	console.log(`ice cream placed on ${stocks.holder[1]}`)

	await time(3000)
	console.log(`${stocks.toppings[0]} as toppings`)

	await time(2000)
	console.log("Serve Ice Cream")
    }

    catch(error){
	 console.log("customer left")
    }
}
		

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ, Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°! Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ:

  1. Π Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ синхронными ΠΈ асинхронными систСмами.
  2. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ асинхронного JavaScript с использованиСм ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ ΠΈ Async/Await.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°!

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ