Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ всички. Π’ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ ΠžΠΌΠ΅Π»Π½ΠΈΡ†ΠΊΠΈ Π‘Π΅Ρ€Π³Π΅ΠΉ. НС Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΡ‚Π΄Π°Π²Π½Π° бях Π΄ΠΎΠΌΠ°ΠΊΠΈΠ½ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π·Π° Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… Π·Π° асинхронност Π² JavaScript. ДнСс Π±ΠΈΡ… искал Π΄Π° обобщя Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π».

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Но ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ основния ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ въвСдСниС. И Ρ‚Π°ΠΊΠ°, Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с опрСдСлСнията: ΠΊΠ°ΠΊΠ²ΠΎ са стСк ΠΈ опашка?

ΠŸΡŠΡ€ΠΆΠΎΠ»Π° Π΅ колСкция, Ρ‡ΠΈΠΈΡ‚ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ сС ΠΈΠ·Π²Π»ΠΈΡ‡Π°Ρ‚ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° LIFO β€žΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ влязъл, ΠΏΡŠΡ€Π²ΠΈ ΠΈΠ·Π»ΡΠ·ΡŠΠ»β€œ.

Π·Π°Π²ΡŠΡ€Ρ‚Π΅Ρ‚Π΅ Π΅ колСкция, Ρ‡ΠΈΠΈΡ‚ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° (β€žΠΏΡŠΡ€Π²ΠΈ влязъл, ΠΏΡ€ΡŠΠ² ΠΈΠ·Π»ΡΠ·ΡŠΠ»β€œ FIFO

Π”ΠΎΠ±Ρ€Π΅, Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

JavaScript Π΅ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ с Π΅Π΄Π½Π° нишка. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΈΠΌΠ° само Π΅Π΄Π½Π° нишка Π·Π° изпълнСниС ΠΈ Π΅Π΄ΠΈΠ½ стСк, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ са Π½Π° опашка Π·Π° изпълнСниС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ JavaScript ΠΌΠΎΠΆΠ΅ Π΄Π° изпълнява само Π΅Π΄Π½Π° опСрация Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‰Π΅ Ρ‡Π°ΠΊΠ°Ρ‚ своя Ρ€Π΅Π΄ Π² стСка, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈ.

Π‘Ρ‚Π΅ΠΊ ΠΎΡ‚ обаТдания Π΅ структура ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, която с прости Π΄ΡƒΠΌΠΈ записва информация Π·Π° мястото Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅. Ако скочим във функция, ΠΈΠ·Π±ΡƒΡ‚Π²Π°ΠΌΠ΅ нСйния запис Π΄ΠΎ Π²ΡŠΡ€Ρ…Π° Π½Π° стСка. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС Π²ΡŠΡ€Π½Π΅ΠΌ ΠΎΡ‚ функция, ΠΈΠ·Π²Π°ΠΆΠ΄Π°ΠΌΠ΅ Π½Π°ΠΉ-горния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ стСка ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ Ρ‚Π°ΠΌ, ΠΎΡ‚ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ смС ΠΈΠ·Π²ΠΈΠΊΠ°Π»ΠΈ Ρ‚Π°Π·ΠΈ функция. Π’ΠΎΠ²Π° Π΅ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡ‚Π΅ΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ. И сСга Π΅Π΄ΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсСн Π²ΡŠΠΏΡ€ΠΎΡ. Как Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ асинхронността Π² JavasScript?

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π² допълнСниС към стСка, Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ΠΈΡ‚Π΅ ΠΈΠΌΠ°Ρ‚ спСциална опашка Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚Π°ΠΊΠ° нарСчСния WebAPI. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ опашка Ρ‰Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΠΎ Ρ€Π΅Π΄ само слСд ΠΊΠ°Ρ‚ΠΎ ΡΡ‚Π΅ΠΊΡŠΡ‚ Π΅ напълно изчистСн. Π•Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° Ρ‚Π΅ сС поставят ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π²ΡŠΡ€Ρ…Ρƒ стСка Π·Π° изпълнСниС. Ако ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² стСка Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ‚ Π² стСка. Π’ΠΎΡ‡Π½ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Ρ€Π΅Π· Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ чСсто Π΅ Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎ във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ функцията Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° стигнС ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π΄ΠΎ стСка, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΅ пълна.

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ слСдния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ Π΄Π° Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°. Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ сС случва Π² систСмата.

console.log('Hi');
setTimeout(function cb1() {
    console.log('cb1');
}, 5000);
console.log('Bye');

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

1) ЗасСга Π½ΠΈΡ‰ΠΎ Π½Π΅ сС случва. ΠšΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Π΅ чиста, ΡΡ‚Π΅ΠΊΡŠΡ‚ Π·Π° повиквания Π΅ ΠΏΡ€Π°Π·Π΅Π½.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

2) Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° console.log('Hi') сС добавя към стСка Π½Π° повикванията.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

3) И С изпълнСно

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

4) Π’ΠΎΠ³Π°Π²Π° console.log('Hi') сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° ΠΎΡ‚ стСка Π½Π° повикванията.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

5) Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° setTimeout(function cb1() {… }). Добавя сС към стСка Π½Π° повикванията.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

6) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° setTimeout(function cb1() {… }) сС изпълнява. Π‘Ρ€Π°ΡƒΠ·ΡŠΡ€ΡŠΡ‚ създава Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ част ΠΎΡ‚ ΡƒΠ΅Π± API. Π©Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π±Ρ€ΠΎΠ΅Π½Π΅.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

7) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° setTimeout(function cb1() {… }) Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си ΠΈ Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π° ΠΎΡ‚ стСка Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

8) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° console.log('Bye') сС добавя към стСка Π·Π° повиквания.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

9) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° console.log('Bye') сС изпълнява.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

10) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° console.log('Bye') сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° ΠΎΡ‚ стСка Π½Π° повикванията.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

11) Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ са ΠΈΠ·ΠΌΠΈΠ½Π°Π»ΠΈ ΠΏΠΎΠ½Π΅ 5000 ms, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΡŠΡ‚ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ поставя ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ cb1 Π² ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π·Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

12) Π¦ΠΈΠΊΡŠΠ»ΡŠΡ‚ Π·Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π²Π·Π΅ΠΌΠ° функция cb1 ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° Π·Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΠΈ я ΠΈΠ·Π±ΡƒΡ‚Π²Π° Π² стСка Π·Π° повиквания.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

13) Ѐункцията cb1 сС изпълнява ΠΈ добавя console.log('cb1') към стСка Π½Π° повикванията.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

14) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° console.log('cb1') сС изпълнява.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

15) ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° console.log('cb1') сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° ΠΎΡ‚ стСка Π½Π° повикванията.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

16) Ѐункция cb1 Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π° ΠΎΡ‚ стСка Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅.

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°:

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Π•, Π½ΠΈΠ΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ асинхронността сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π² JavaScript. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π·Π° Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° Π½Π° асинхронния ΠΊΠΎΠ΄.

Π•Π²ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° Π½Π° асинхронния ΠΊΠΎΠ΄.

a(function (resultsFromA) {
    b(resultsFromA, function (resultsFromB) {
        c(resultsFromB, function (resultsFromC) {
            d(resultsFromC, function (resultsFromD) {
                e(resultsFromD, function (resultsFromE) {
                    f(resultsFromE, function (resultsFromF) {
                        console.log(resultsFromF);
                    })
                })
            })
        })
    })
});

Асинхронното ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ Π³ΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°ΠΌΠ΅ Π² JavaScript, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° само с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ всяка Π΄Ρ€ΡƒΠ³Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈΡ…Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈΡ‚Π΅ повиквания. И Π΅ Π³ΠΎΡ‚ΠΈΠ½ΠΎ, Π·Π°Π±Π°Π²Π½ΠΎ ΠΈ ΠΏΠ»Π°ΠΌΠ΅Π½Π½ΠΎ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ Π² Ρ‚ΡŠΠ³Π°, мСланхолия ΠΈ Ρ‚ΡŠΠ³Π°. Π—Π°Ρ‰ΠΎ? Π”Π°, просто Π΅:

  • Π‘ нарастванСто Π½Π° слоТността Π½Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π±ΡŠΡ€Π·ΠΎ сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π² нСясни мноТСство Π²Π»ΠΎΠΆΠ΅Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ - β€žΠ°Π΄ Π·Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅β€œ.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° бъдС ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π½Π°Ρ‚Π°.
  • НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²Ρ€ΡŠΡ‰Π°Ρ‚Π΅ ΠΈΠ·Ρ€Π°Π·ΠΈ с return.

Π‘ появата Π½Π° Promise ситуацията стана ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π°.

new Promise(function(resolve, reject) {
    setTimeout(() => resolve(1), 2000);

}).then((result) => {
    alert(result);
    return result + 2;

}).then((result) => {
    throw new Error('FAILED HERE');
    alert(result);
    return result + 2;

}).then((result) => {
    alert(result);
    return result + 2;

}).catch((e) => {
    console.log('error: ', e);
});

  • ΠŸΠΎΡΠ²ΠΈΡ…Π° сС ΠΎΠ±Π΅Ρ‰Π°Π²Π°Ρ‰ΠΈ Π²Π΅Ρ€ΠΈΠ³ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ…Π° чСтимостта Π½Π° ΠΊΠΎΠ΄Π°
  • ИмашС ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ
  • ΠŸΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ изпълнСниС с Π΄ΠΎΠ±Π°Π²Π΅Π½ Promise.all
  • МоТСм Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π° асинхронност с async/await

Но ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌΠ° своитС ограничСния. НапримСр, ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, Π±Π΅Π· Ρ‚Π°Π½Ρ†ΠΈ с Ρ‚Π°ΠΌΠ±ΡƒΡ€Π°, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π΅Π΄Π½Π° стойност.

Π•, Ρ‚ΡƒΠΊ ΠΏΠ»Π°Π²Π½ΠΎ Π½Π°Π±Π»ΠΈΠΆΠ°Π²Π°ΠΌΠ΅ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π˜Π·ΠΌΠΎΡ€Π΅Π½? Π•, Ρ…ΡƒΠ±Π°Π²ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄Π° сваритС няколко Ρ‡Π°ΠΉΠΊΠΈ, Π΄Π° помислитС ΠΈ Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅, Π·Π° Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅. И Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅β€Š- ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½Π° ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°, фокусирана Π²ΡŠΡ€Ρ…Ρƒ ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ разпространСниСто Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ.

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ссылку Π½Π° элСмСнт
const input = ducument.querySelector('input');

const eventsArray = [];

// ΠŸΡƒΡˆΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ событиС Π² массив eventsArray
input.addEventListener('keyup',
    event => eventsArray.push(event)
);

НСка си прСдставим, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ»Π΅ Π·Π° въвСТданС. БъздавамС масив ΠΈ Π·Π° всСки клавиш Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Ρ‰Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π² нашия масив. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π±ΠΈΡ… искал Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ масив Π΅ сортиран ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚.Π΅. ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π½Π° ΠΏΠΎ-ΠΊΡŠΡΠ½ΠΈΡ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π΅ ΠΏΠΎ-голям ΠΎΡ‚ индСкса Π½Π° ΠΏΠΎ-Ρ€Π°Π½Π½ΠΈΡ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Вакъв масив Π΅ опростСн ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΏΠΎΡ‚ΠΎΠΊ. Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Ρ‚ΠΎΠ·ΠΈ масив бСзопасно Π΄Π° сС Π½Π°Ρ€Π΅Ρ‡Π΅ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚ΠΎΠΉ трябва Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° Π°Π±ΠΎΠ½Π°Ρ‚ΠΈΡ‚Π΅, Ρ‡Π΅ Π² Π½Π΅Π³ΠΎ са пристигнали Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ. Π’Π°ΠΊΠ° стигамС Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊ.

ΠŸΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ

const { interval } = Rx;
const { take } = RxOperators;

interval(1000).pipe(
    take(4)
)

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Flowβ€ŠΠ΅ масив ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, сортирани ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ са сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ. Π‘Π΅Π³Π° си прСдставСтС ΠΊΠΎΠ»ΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ става Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, Π² ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° задСйстватС няколко ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ части Π½Π° ΠΊΠΎΠ΄Π° Π·Π° Π΅Π΄Π½ΠΎ дСйствиС. НиС просто сС Π°Π±ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Ρ‚ΠΎΠΉ Ρ‰Π΅ Π½ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΡΡ‚ΡŠΠΏΡΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. И Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° RxJs ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

RxJS Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с асинхронни ΠΈ Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ наблюдаСми послСдоватСлности. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° прСдоставя основния Ρ‚ΠΈΠΏ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ, няколко Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ (ΠΠ°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΠΈ, ΠΏΠ»Π°Π½ΠΎΠ²ΠΈΡ†ΠΈ, субСкти) ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° със ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΊΠ°Ρ‚ΠΎ с ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ (ΠΊΠ°Ρ€Ρ‚Π°, Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅, намаляванС, всСки ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΡ‚ JavaScript Array).

НСка Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ основнитС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π½Π° Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

НаблюдаСм, Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π», ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»

Observable Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Π±Π°Π·ΠΎΠ² Ρ‚ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅. Π’ΠΎΠ·ΠΈ клас ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° основната част ΠΎΡ‚ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° RxJs. Π’ΠΎΠΉ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с наблюдаСм ΠΏΠΎΡ‚ΠΎΠΊ, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π°Π±ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ Ρ‡Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° Π°Π±ΠΎΠ½ΠΈΡ€Π°Π½Π΅.

Observable Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° спомагатСлСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° създаванС Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚.Π½Π°Ρ€ ΠΠ°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π». Извиква сС ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° стойности Π·Π° Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π» ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π». МоТС Π΄Π° бъдС масив, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΡƒΠ΅Π± сокСт, някакъв Π²ΠΈΠ΄ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΠΈ Ρ‚.Π½. Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ observable Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Producer ΠΈ Observer.

Observable ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π½Π° Observer:

  • слСдващ - Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ
  • Π³Ρ€Π΅ΡˆΠΊΠ° - Π³Ρ€Π΅ΡˆΠΊΠ°, Π°ΠΊΠΎ послСдоватСлността Π΅ ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Ρ‚ΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΡΡŠΡ‰ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° края Π½Π° ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π°Ρ‚Π°.
  • Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ - сигнал Π·Π° края Π½Π° послСдоватСлността. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ няма Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ дСмонстрация:

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Ρ‰Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ стойноститС 1, 2, 3 ΠΈ слСд 1 сСк. ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ 4 ΠΈ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° нишка.

Мисли на глас

И Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Π±Ρ€Π°Ρ…, Ρ‡Π΅ Π΅ ΠΏΠΎ-интСрСсно Π΄Π° Ρ€Π°Π·ΠΊΠ°Π·Π²Π°ΠΌ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° пиша Π·Π° Ρ‚ΠΎΠ²Π°. πŸ˜€

АбонамСнт

ΠšΠΎΠ³Π°Ρ‚ΠΎ сС Π°Π±ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊ, създавамС Π½ΠΎΠ² клас Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС ΠΎΡ‚ΠΏΠΈΡˆΠ΅ΠΌ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΡ‚ΠΏΠΈΡˆΠ΅Ρ‚Π΅. МоТСм ΡΡŠΡ‰ΠΎ Π΄Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π°ΠΌΠ΅ Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅. Π•, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π·Π³Ρ€ΡƒΠΏΠΈΡ€Π°ΠΌΠ΅ нишки с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° добавянС ΠΈ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄. Π‘ΠΈΡ… искал Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС отписвамС, Π½ΠΈΠ΅ сС отписвамС ΠΎΡ‚ всички Π΄ΡŠΡ‰Π΅Ρ€Π½ΠΈ Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚ΠΈ, сякаш Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са ΠΈΠ·Π²ΠΈΠΊΠ°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° отписванС. ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΉ.

Π’ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ

HOT
Π‘Π’Π£Π”

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡΡ‚ Π΅ създадСн извън Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡ‚ΠΎ
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡΡ‚ Π΅ създадСн Π²ΡŠΡ‚Ρ€Π΅ Π² наблюдаСмия

Π”Π°Π½Π½ΠΈΡ‚Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡ‚ΠΎ
Π”Π°Π½Π½ΠΈΡ‚Π΅ сС прСдоставят Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚Π°.

НуТдаСтС сС ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π»ΠΎΠ³ΠΈΠΊΠ°, Π·Π° Π΄Π° сС ΠΎΡ‚ΠΏΠΈΡˆΠ΅Ρ‚Π΅
ΠΠΈΡˆΠΊΠ°Ρ‚Π° сС прСкратява сама

Използва Π²Ρ€ΡŠΠ·ΠΊΠ° "Π΅Π΄ΠΈΠ½ към ΠΌΠ½ΠΎΠ³ΠΎ".
Използва Π²Ρ€ΡŠΠ·ΠΊΠ° Π΅Π΄Π½ΠΎ към Π΅Π΄Π½ΠΎ

Всички Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚ΠΈ ΠΈΠΌΠ°Ρ‚ Π΅Π΄Π½Π°ΠΊΠ²Π° стойност
АбонамСнтитС са нСзависими

Π”Π°Π½Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π³ΡƒΠ±Π΅Π½ΠΈ, Π°ΠΊΠΎ няма Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚
ΠŸΡ€Π΅ΠΈΠ·Π΄Π°Π²Π° всички стойности Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π° Π½ΠΎΠ² Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚

Π—Π° Π΄Π° направя аналогия, Π±ΠΈΡ… си прСдставил Π³ΠΎΡ€Π΅Ρ‰ ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠ°Ρ‚ΠΎ Ρ„ΠΈΠ»ΠΌ Π² ΠΊΠΈΠ½ΠΎ. Π’ какъв ΠΌΠΎΠΌΠ΅Π½Ρ‚ си дошъл, ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ си Π·Π°ΠΏΠΎΡ‡Π½Π°Π» Π΄Π° глСдаш. Π‘ΠΈΡ… сравнил студСн ΠΏΠΎΡ‚ΠΎΠΊ с ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ Π² тях. ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°. ВсСки ΠΎΠ±Π°ΠΆΠ΄Π°Ρ‰ сС ΡΠ»ΡƒΡˆΠ° записа Π½Π° тСлСфонния сСкрСтар ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π΄ΠΎ края, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ с отписванС.

Π‘ΠΈΡ… искал Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ ΠΈΠΌΠ° ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΠΏΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ (срСщам Ρ‚Π°ΠΊΠΎΠ²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ рядко ΠΈ само Π² Ρ‡ΡƒΠΆΠ΄ΠΈ общности) - Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ сС трансформира ΠΎΡ‚ студСн ΠΏΠΎΡ‚ΠΎΠΊ Π² Π³ΠΎΡ€Π΅Ρ‰. Π’ΡŠΠ·Π½ΠΈΠΊΠ²Π° Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ - къдС Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°)) Π©Π΅ Π΄Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π°.

Работя с Angular. Π’ΠΎΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° rxjs. Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π° Π΄Π°Π½Π½ΠΈ към ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΎΡ‡Π°ΠΊΠ²Π°ΠΌ студСн ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π² шаблона с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° asyncPipe. Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ρ‚Π°Π·ΠΈ Ρ‚Ρ€ΡŠΠ±Π° няколко ΠΏΡŠΡ‚ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π°, Π²Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ сС към дСфиницията Π½Π° студСн ΠΏΠΎΡ‚ΠΎΠΊ, всяка Ρ‚Ρ€ΡŠΠ±Π° Ρ‰Π΅ изисква Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΌΠ΅ΠΊΠΎ ΠΊΠ°Π·Π°Π½ΠΎ странно. И Π°ΠΊΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΠΌ студСн ΠΏΠΎΡ‚ΠΎΠΊ Π² Ρ‚ΠΎΠΏΡŠΠ», Ρ‚ΠΎΠ³Π°Π²Π° заявката Ρ‰Π΅ сС случи вСднъТ.

ΠšΠ°Ρ‚ΠΎ цяло Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π΅ доста Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅

return this.http.get(`${environment.apiUrl}/${this.apiUrl}/trade_companies`)
    .pipe(
        tap(({ data }: TradeCompanyList) => this.companies$$.next(cloneDeep(data))),
        map(({ data }: TradeCompanyList) => data)
    );

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½ΠΈ прСдоставят Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΡ†ΠΈ. Π’Π΅ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π°, ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π°Ρ‰ΠΈ Π² ΠΠ°Π±Π»ΡŽΠ΄Π°Π²Π°Π½ΠΎΡ‚ΠΎ. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ няколко ΠΎΡ‚ Π½Π°ΠΉ-популярнитС, Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ информация Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ Π² ΠΏΠΎΠ»Π΅Π·Π½Π° информация.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-Π½Π°

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с помощния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°. Π’ΠΎΠΉ създава Observable въз основа Π½Π° проста стойност.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-Ρ„ΠΈΠ»Ρ‚ΡŠΡ€

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ подсказва ΠΈΠΌΠ΅Ρ‚ΠΎ, Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° сигнала Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°. Ако ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π²ΡŠΡ€Π½Π΅ истина, Ρ‚ΠΎΠΉ прСскача ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ - Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

take - Π’Π·Π΅ΠΌΠ° стойността Π½Π° броя ΠΈΠ·Π»ΡŠΡ‡Π²Π°Π½ΠΈΡ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡŠΡ‚ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-debounceTime

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

debounceTime - ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Ρ ΠΈΠ·Π»ΡŠΡ‡Π΅Π½ΠΈ стойности, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π² опрСдСлСния ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ - слСд ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΈΠ·Π»ΡŠΡ‡Π²Π° послСдната стойност.

const { Observable } = Rx;
const { debounceTime, take } = RxOperators;

Observable.create((observer) => {
  let i = 1;
  observer.next(i++);
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1000мс
  setInterval(() => {
    observer.next(i++)
  }, 1000);

 // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1500мс
  setInterval(() => {
    observer.next(i++)
  }, 1500);
}).pipe(
  debounceTime(700),  // ОТидаСм 700мс значСния ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ
  take(3)
);  

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-takeWhile

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

Издава стойности, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ takeWhile Π²ΡŠΡ€Π½Π΅ false, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ сС отписва ΠΎΡ‚ Π½ΠΈΡˆΠΊΠ°Ρ‚Π°.

const { Observable } = Rx;
const { debounceTime, takeWhile } = RxOperators;

Observable.create((observer) => {
  let i = 1;
  observer.next(i++);
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1000мс
  setInterval(() => {
    observer.next(i++)
  }, 1000);
}).pipe(
  takeWhile( producer =>  producer < 5 )
);  

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-combineLatest

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ combineLatest Π΅ донякъдС ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° promise.all. Π’ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° мноТСство ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π² Π΅Π΄ΠΈΠ½. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ всяка нишка Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½ΠΎ ΠΈΠ·Π»ΡŠΡ‡Π²Π°Π½Π΅, Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ‚Π΅ стойности ΠΎΡ‚ всяка ΠΊΠ°Ρ‚ΠΎ масив. ОсвСн Ρ‚ΠΎΠ²Π°, слСд всяко ΠΈΠ·Π»ΡŠΡ‡Π²Π°Π½Π΅ ΠΎΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΄Π°Π΄Π΅ Π½ΠΎΠ²ΠΈ стойности.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

const { combineLatest, Observable } = Rx;
const { take } = RxOperators;

const observer_1 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1000мс
  setInterval(() => {
    observer.next('a: ' + i++);
  }, 1000);
});

const observer_2 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 750мс
  setInterval(() => {
    observer.next('b: ' + i++);
  }, 750);
});

combineLatest(observer_1, observer_2).pipe(take(5));

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-zip

Zip - Ρ‡Π°ΠΊΠ° стойност ΠΎΡ‚ всСки ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° масив въз основа Π½Π° Ρ‚Π΅Π·ΠΈ стойности. Ако стойността Π½Π΅ ΠΈΠ΄Π²Π° ΠΎΡ‚ никоя нишка, Ρ‚ΠΎΠ³Π°Π²Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° няма Π΄Π° бъдС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π°.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

const { zip, Observable } = Rx;
const { take } = RxOperators;

const observer_1 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1000мс
  setInterval(() => {
    observer.next('a: ' + i++);
  }, 1000);
});

const observer_2 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 750
  setInterval(() => {
    observer.next('b: ' + i++);
  }, 750);
});

const observer_3 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 500
  setInterval(() => {
    observer.next('c: ' + i++);
  }, 500);
});

zip(observer_1, observer_2, observer_3).pipe(take(5));

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ - forkJoin

forkJoin ΡΡŠΡ‰ΠΎ сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΠ²Π° към нишки, Π½ΠΎ ΠΈΠ·Π»ΡŠΡ‡Π²Π° стойност само ΠΊΠΎΠ³Π°Ρ‚ΠΎ всички нишки са Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

const { forkJoin, Observable } = Rx;
const { take } = RxOperators;

const observer_1 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1000мс
  setInterval(() => {
    observer.next('a: ' + i++);
  }, 1000);
}).pipe(take(3));

const observer_2 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 750
  setInterval(() => {
    observer.next('b: ' + i++);
  }, 750);
}).pipe(take(5));

const observer_3 = Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 500
  setInterval(() => {
    observer.next('c: ' + i++);
  }, 500);
}).pipe(take(4));

forkJoin(observer_1, observer_2, observer_3);

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ-ΠΊΠ°Ρ€Ρ‚Π°

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°Ρ€Ρ‚Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° ΠΈΠ·Π»ΡŠΡ‡Π΅Π½Π°Ρ‚Π° стойност Π² Π½ΠΎΠ²Π°.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

const {  Observable } = Rx;
const { take, map } = RxOperators;

Observable.create((observer) => {
  let i = 1;
  // Π˜ΡΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π· Π² 1000мс
  setInterval(() => {
    observer.next(i++);
  }, 1000);
}).pipe(
  map(x => x * 10),
  take(3)
);

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ - сподСлянС, докосванС

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° докосванС Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ странични Π΅Ρ„Π΅ΠΊΡ‚ΠΈ, тоСст всякакви дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ влияят Π½Π° послСдоватСлността.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° сподСлСната ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ студСния ΠΏΠΎΡ‚ΠΎΠΊ Π² Π³ΠΎΡ€Π΅Ρ‰.

Асинхронно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² JavaScript (Callback, Promise, RxJs)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ са Π³ΠΎΡ‚ΠΎΠ²ΠΈ. НСка Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Ρ‚Π΅ΠΌΠ°Ρ‚Π°.

Мисли на глас

И Ρ‚ΠΎΠ³Π°Π²Π° ΠΎΡ‚ΠΈΠ΄ΠΎΡ… Π΄Π° пия Ρ‡Π°ΠΉ. Писна ΠΌΠΈ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ πŸ˜€

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ сСмСйство

Π’Π΅ΠΌΠ°Ρ‚Π° Π½Π° сСмСйството Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π³ΠΎΡ€Π΅Ρ‰ΠΈ Ρ‚Π΅ΠΌΠΈ. Π’Π΅Π·ΠΈ класовС са Π²ΠΈΠ΄ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ дСйства ΠΊΠ°Ρ‚ΠΎ наблюдаСм ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π» Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π΅ Π³ΠΎΡ€Π΅Ρ‰ ΠΏΠΎΡ‚ΠΎΠΊ, трябва Π΄Π° сС ΠΎΡ‚ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΡ‚ нСя. Ако Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° основнитС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, Ρ‚ΠΎΠ²Π° са:

  • слСдващ - ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ към ΠΏΠΎΡ‚ΠΎΠΊΠ°
  • Π³Ρ€Π΅ΡˆΠΊΠ° - Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ прСкратяванС Π½Π° нишка
  • Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ - ΠΊΡ€Π°ΠΉ Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π°
  • subscribe - Π°Π±ΠΎΠ½ΠΈΡ€Π°ΠΉΡ‚Π΅ сС Π·Π° ΠΏΠΎΡ‚ΠΎΠΊ
  • unsubscribe - отписванС ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°
  • asObservable - трансформирайтС сС Π² Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»
  • toPromise - трансформира сС Π² ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Ρ‚Π΅ 4 5 Π²ΠΈΠ΄Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ.

Мисли на глас

ΠšΠ°Π·Π°Ρ… 4 Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½ΠΎ сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ са Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½. ΠšΠ°ΠΊΡ‚ΠΎ сС ΠΊΠ°Π·Π²Π°, ΠΆΠΈΠ²Π΅ΠΉ ΠΈ сС ΡƒΡ‡ΠΈ.

ΠŸΡ€ΠΎΡΡ‚Π° Ρ‚Π΅ΠΌΠ° new Subject()- Π½Π°ΠΉ-простият Π²ΠΈΠ΄ Ρ‚Π΅ΠΌΠΈ. БъздадСн Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. ΠŸΡ€Π΅Π΄Π°Π²Π° стойноститС, ΠΊΠΎΠΈΡ‚ΠΎ са дошли само слСд Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚Π°.

BehaviorSubject new BehaviorSubject( defaultData<T> ) - спорСд ΠΌΠ΅Π½ Π½Π°ΠΉ-чСсто срСщаният Ρ‚ΠΈΠΏ субСкти. Π’Ρ…ΠΎΠ΄ΡŠΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌΠ° стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’ΠΈΠ½Π°Π³ΠΈ Π·Π°ΠΏΠ°Π·Π²Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ послСдния Π±Ρ€ΠΎΠΉ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ ΠΏΡ€ΠΈ Π°Π±ΠΎΠ½ΠΈΡ€Π°Π½Π΅. Π’ΠΎΠ·ΠΈ клас ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° стойност, ΠΊΠΎΠΉΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π° Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° стойност Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ReplaySubject new ReplaySubject(bufferSize?: number, windowTime?: number) - По ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° ΠΎΡ‚ стойности, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² сСбС си, ΠΈ втория ΠΏΡŠΡ‚, ΠΏΡ€Π΅Π· ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

асинхронСн ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ new AsyncSubject() - Π½ΠΈΡ‰ΠΎ Π½Π΅ сС случва ΠΏΡ€ΠΈ Π°Π±ΠΎΠ½ΠΈΡ€Π°Π½Π΅ ΠΈ стойността Ρ‰Π΅ бъдС Π²ΡŠΡ€Π½Π°Ρ‚Π° само ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π°. Π©Π΅ бъдС Π²ΡŠΡ€Π½Π°Ρ‚Π° само послСдната стойност Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

WebSocketSubject new WebSocketSubject(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>) - ДокумСнтацията ΠΌΡŠΠ»Ρ‡ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈ Π°Π· самият Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚. ΠšΠΎΠΉΡ‚ΠΎ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ, ΠΏΠΈΡˆΠ΅Ρ‚Π΅, Π½ΠΈΠ΅ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ.

ΡƒΡ„. Π•, обмислихмС всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ исках Π΄Π° ΠΊΠ°ΠΆΠ° днСс. НадявамС сС, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ информация Π΅ Π±ΠΈΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ сами списъка с Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π° ПолСзна информация.

ПолСзна информация

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€