ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. ΠΠ° ΡΠ²ΡΠ·ΠΈ ΠΠΌΠ΅Π»ΡΠ½ΠΈΡΠΊΠΈΠΉ Π‘Π΅ΡΠ³Π΅ΠΉ. ΠΠ΅ ΡΠ°ΠΊ Π΄Π°Π²Π½ΠΎ Ρ Π²Π΅Π» ΡΡΡΠΈΠΌ ΠΏΠΎ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π³Π΄Π΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» ΠΏΡΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ Π² JavaScript. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» Π·Π°ΠΊΠΎΠ½ΡΠΏΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π».
ΠΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π²ΠΎΠ΄Π½ΡΡ. ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ: ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ΅ΠΊ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ?
Π‘ΡΠ΅ΠΊ β ΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Β«ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²ΠΎΡΠ΅Π», ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΡΡΠ΅Π»Β» LIFO
ΠΡΠ΅ΡΠ΅Π΄Ρ β ΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ (Β«ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΠΎΡΠ΅Π», ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΡΡΠ΅Π»Β» FIFO
ΠΠΊΠ΅ΠΉ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ.
JavaScript β ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΅ΠΊ, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ JavaScript ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π±ΡΠ΄ΡΡ ΠΆΠ΄Π°ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π² ΡΡΠ΅ΠΊΠ΅, ΠΏΠΎΠΊΠ° ΠΈΡ Π½Π΅ Π²ΡΠ·ΠΎΠ²ΡΡ.
Π‘ΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² β ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ, ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΌΠ΅ΡΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π³Π΄Π΅ ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ ΠΎ Π½Π΅ΠΉ Π² Π²Π΅ΡΡ Π½ΡΡ ΡΠ°ΡΡΡ ΡΡΠ΅ΠΊΠ°. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ, ΠΌΡ Π²ΡΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΡΠ°ΠΌΡΠΉ Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΡΠ°ΠΌ, ΠΎΡΠΊΡΠ΄Π° Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΎ β Π²ΡΡ, ΡΡΠΎ ΡΠΌΠ΅Π΅Ρ ΡΡΠ΅ΠΊ. Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΠ°ΠΊ ΡΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ Π² JavasScript?
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠ΅ΠΊΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΎΡΠΎΠ±Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ WebAPI. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΡΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠ΅ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΈΡΠ΅Π½. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π² ΡΡΠ΅ΠΊ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π² ΡΡΠ΅ΠΊΠ΅ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎ ΠΎΠ½ΠΈ Π² ΡΡΠ΅ΠΊ ΠΏΠΎΠΏΠ°ΡΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ. ΠΠ°ΠΊ ΡΠ°Π· ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ°ΡΡΠ° ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ Π½Π΅ ΡΠΎΡΠ½ΡΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΠ°ΡΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π² ΡΡΠ΅ΠΊ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ Π·Π°ΠΉΠΌΡΠΌΡΡ Π΅Π³ΠΎ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΠΌ Β«Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌΒ». Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
console.log('Hi');
setTimeout(function cb1() {
console.log('cb1');
}, 5000);
console.log('Bye');
1) ΠΠΎΠΊΠ° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΠΎΠ½ΡΠΎΠ»Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΡΠΈΡΡΠ°, ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΏΡΡΡ.
2) ΠΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β console.log(‘Hi’)Β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
3) Π ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ
4) ΠΠ°ΡΠ΅ΠΌ console.log(‘Hi’) ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ².
5) Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Β setTimeout(function cb1() {β¦ }). ΠΠ½Π°Β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
6) ΠΠΎΠΌΠ°Π½Π΄Π°Β setTimeout(function cb1() {β¦ })Β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΡΠ°ΡΠ·Π΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΡΠ°ΡΡΡΡ Web API. ΠΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΡΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
7) ΠΠΎΠΌΠ°Π½Π΄Π°Β setTimeout(function cb1() {β¦ })Β Π·Π°Π²Π΅ΡΡΠΈΠ»Π° ΡΠ°Π±ΠΎΡΡ ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ².
8) ΠΠΎΠΌΠ°Π½Π΄Π°Β console.log(‘Bye’)Β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
9) ΠΠΎΠΌΠ°Π½Π΄Π°Β console.log(‘Bye’)Β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
10) ΠΠΎΠΌΠ°Π½Π΄Π°Β console.log(‘Bye’)Β ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ².
11) ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΉΠ΄ΡΡ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, 5000 ΠΌΡ., ΡΠ°ΠΉΠΌΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΊΠΎΠ»Π»Π±ΡΠΊΒ cb1Β Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΎΠ².
12) Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ Π±Π΅ΡΡΡ c ΡΡΠ½ΠΊΡΠΈΡΒ cb1Β ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΎΠ² ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Ρ Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
13) Π€ΡΠ½ΠΊΡΠΈΡΒ cb1Β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΒ console.log(‘cb1’)Β Π² ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
14) ΠΠΎΠΌΠ°Π½Π΄Π°Β console.log(‘cb1’)Β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
15) ΠΠΎΠΌΠ°Π½Π΄Π°Β console.log(‘cb1’)Β ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ².
16) Π€ΡΠ½ΠΊΡΠΈΡΒ cb1Β ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΠ·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅:
ΠΡ Π²ΠΎΡ ΠΌΡ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΊΠ°ΠΊ Π² 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, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΊΠ°ΠΊ Π»ΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ. Π’Π°ΠΊ ΡΠΎΠ΄ΠΈΠ»ΠΈΡΡ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ. Π ΡΡΠΎ ΠΏΡΠΈΠΊΠΎΠ»ΡΠ½ΠΎ, Π²Π΅ΡΠ΅Π»ΠΎ ΠΈ Π·Π°Π΄ΠΎΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π³ΡΡΡΡΡ, ΡΠΎΡΠΊΡ ΠΈ ΠΏΠ΅ΡΠ°Π»Ρ. ΠΠΎΡΠ΅ΠΌΡ? ΠΠ° Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΎ:
- Π‘ ΡΠΎΡΡΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΡΡΡΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΌΠ°Π»ΠΎΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ β Β«callback hellΒ».
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΏΡΡΡΠΈΡΡ.
- ΠΠ΅Π»ΡΠ·Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ 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
ΠΠΎ Ρ ΠΏΡΠΎΠΌΠΈΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠΌΠΈΡ, Π±Π΅Π· ΡΠ°Π½ΡΠ΅Π² Ρ Π±ΡΠ±Π½ΠΎΠΌ, Π½Π΅Π»ΡΠ·Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ, Π° ΡΡΠΎ ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡ Π²ΠΎΡ ΠΌΡ ΠΈ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ ΠΊ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π£ΡΡΠ°Π»ΠΈ? ΠΡ Π±Π»Π°Π³ΠΎ Π΄Π΅Π»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡΠΈ Π·Π°Π²Π°ΡΠΈΡΡ ΡΠ°Π΅ΠΊ, ΠΎΠ±ΠΌΠΎΠ·Π³ΠΎΠ²Π°ΡΡ ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΡΠΈΡΠ°ΡΡ Π΄Π°Π»Π΅Π΅. Π Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡ.
Π Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅βββΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΠΏΠΎΡΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ .
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ
const input = ducument.querySelector('input');
const eventsArray = [];
// ΠΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ² eventsArray
input.addEventListener('keyup',
event => eventsArray.push(event)
);
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°. ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ², ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ keyup ΡΠΎΠ±ΡΡΠΈΡ input ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² Π½Π°ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΡΠΈ ΡΡΠΎΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π°Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈβ Ρ.Π΅. βΠΈΠ½Π΄Π΅ΠΊΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ . Π’Π°ΠΊΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΡΠΎΠΊ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ± ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΌΠ΅Π»ΠΎ Π½Π°Π·Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅ΡΡ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠ°ΠΌ, ΡΡΠΎ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ
const { interval } = Rx;
const { take } = RxOperators;
interval(1000).pipe(
take(4)
)
ΠΠΎΡΠΎΠΊβββΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² Π΄Π°Π½Π½ΡΡ , ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ. Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π° ΠΎΠ΄Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ Π² ΡΠ°Π·Π½ΡΡ ΡΡΠ°ΡΡΠΊΠ°Ρ ΠΊΠΎΠ΄Π°. ΠΡ ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π° ΠΏΠΎΡΠΎΠΊ ΠΈ ΠΎΠ½ Π½Π°ΠΌ ΡΠ°ΠΌ ΡΠΎΠΎΠ±ΡΠΈΡ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. Π ΡΡΠΎ ΡΠΌΠ΅Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° RxJs.
RxJS β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π½Π° ΡΠΎΠ±ΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΏ Observable, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² (Observer, Schedulers, Subjects) ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΠΊΠ°ΠΊ Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ (map, filter, reduce, every ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΈΠ· JavaScript Array).
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
Observable, Observer, Producer
Observable β ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ RxJs. ΠΠ½ ΡΠ²ΡΠ·Π°Π½ Ρ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° subscribe.
Π Observable ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Observer. ΠΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Observer Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Producer. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ°ΡΡΠΈΠ², ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, web socket, ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ Ρ.ΠΏ. Π’Π°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ observable ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ Producer ΠΈ Observer.
Observable ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΈ Π²ΠΈΠ΄Π° ΡΠΎΠ±ΡΡΠΈΠΉ Observer:
- next β Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
- error β ΠΎΡΠΈΠ±ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
- complete β ΡΠΈΠ³Π½Π°Π» ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π΄Π΅ΠΌΠΎ:
Π Π½Π°ΡΠ°Π»Π΅ ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1, 2, 3, Π° ΡΠΏΡΡΡΡ 1 ΡΠ΅ΠΊ. ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ 4 ΠΈ Π·Π°Π²Π΅ΡΡΠΈΠΌ Π½Π°Ρ ΠΏΠΎΡΠΎΠΊ.
ΠΡΡΠ»ΠΈ Π² ΡΠ»ΡΡ
Π ΡΡΡ Ρ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅ΠΉ ΡΠ΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ. π
Subscription
ΠΠΎΠ³Π΄Π° ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π° ΠΏΠΎΡΠΎΠΊ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ subscription, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°Π΅Ρ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° unsubscribe. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° add. ΠΡ ΠΈ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ remove. ΠΠ΅ΡΠΎΠ΄Ρ add ΠΈ remove Π½Π° Π²Ρ ΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ. Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΡΠΏΠΈΡΠΊΡ, ΡΠΎ ΠΌΡ ΠΎΡΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ ΠΎΡ Π²ΡΠ΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π±Ρ ΠΈ Ρ Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ unsubscribe. ΠΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅.
ΠΠΈΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²
HOT
COLD
Producer ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ½Π°ΡΡΠΆΠΈ observable
Producer ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ observable
ΠΠ°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ observable
ΠΠ°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ
ΠΡΠΆΠ½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π΄Π»Ρ ΠΎΡΠΏΠΈΡΠΊΠΈ
ΠΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΡΠ·Ρ ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΡΠ·Ρ Π²ΠΈΠ΄Π° ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡ
ΠΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ ΠΈΠΌΠ΅ΡΡ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ
ΠΠ°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ
ΠΠ΅ΡΠ΅ΠΈΠ·Π΄Π°Π΅Ρ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ, ΡΠΎ Ρ Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π³ΠΎΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊΠ°ΠΊ ΡΠΈΠ»ΡΠΌ Π² ΠΊΠΈΠ½ΠΎΡΠ΅Π°ΡΡΠ΅. Π ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡ ΠΏΡΠΈΡΠ΅Π», Ρ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈ Π½Π°ΡΠ°Π» ΠΏΡΠΎΡΠΌΠΎΡΡ. Π₯ΠΎΠ»ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Ρ Π±Ρ ΡΡΠ°Π²Π½ΠΈΠ» ΡΠΎ Π·Π²ΠΎΠ½ΠΊΠΎΠΌ Π² ΡΠ΅Ρ . ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ. ΠΡΠ±ΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΠ²ΡΠΈΠΉ ΡΠ»ΡΡΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΡ Π°Π²ΡΠΎΠΎΡΠ²Π΅ΡΡΠΈΠΊΠ° ΠΎΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°, Π½ΠΎ ΡΡ ΠΌΠΎΠΆΠ΅ΡΡ Π±ΡΠΎΡΠΈΡΡ ΡΡΡΠ±ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ unsubscribe.
Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΅ΡΠ΅ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ warm ΠΏΠΎΡΠΎΠΊΠΈ ( ΡΠ°ΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ Π²ΡΡΡΠ΅ΡΠ°Π» ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π·Π°ΡΡΠ±Π΅ΠΆΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°Ρ ) β ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· Ρ ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π² Π³ΠΎΡΡΡΠΈΠΉ. ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ β Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ)) ΠΡΠΈΠ²Π΅Π΄Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ.
Π― ΡΠ°Π±ΠΎΡΠ°Ρ Ρ Π°Π½Π³ΡΠ»ΡΡΠΎΠΌ. ΠΠ½ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ rxjs. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΎΠΆΠΈΠ΄Π°Ρ Ρ ΠΎΠ»ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ asyncPipe. ΠΡΠ»ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΠΏΠ°ΠΉΠΏ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ pipe Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΡΠΎ ΠΌΡΠ³ΠΊΠΎ Π³ΠΎΠ²ΠΎΡΡ ΡΡΡΠ°Π½Π½ΠΎ. Π Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡ Ρ ΠΎΠ»ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π² ΡΠ΅ΠΏΠ»ΡΠΉ, ΡΠΎ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ.
ΠΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Π° Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , Π½ΠΎ Π²Π°ΠΆΠ½Π°.
Operators
return this.http.get(`${environment.apiUrl}/${this.apiUrl}/trade_companies`)
.pipe(
tap(({ data }: TradeCompanyList) => this.companies$$.next(cloneDeep(data))),
map(({ data }: TradeCompanyList) => data)
);
Π Π°ΡΡΠΈΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π½Π°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ. ΠΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, ΠΏΡΠΎΡΠ΅ΠΊΠ°ΡΡΠΈΠ΅ Π² Observable. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ°ΡΠΎΡΠΊΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ , Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌ Π² ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
Operators β of
ΠΠ°ΡΠ½Π΅ΠΌ ΡΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° of.Β ΠΠ½ ΡΠΎΠ·Π΄Π°Π΅ΡΒ ObservableΒ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Operators β filter
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ filter, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΡΠΈΠ»ΡΡΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π» ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΡΠΈΠ½Ρ, ΡΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π΄Π°Π»Π΅Π΅.
Operators β take
take β ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»-Π²Π° ΡΠΌΠΈΡΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ.
Operators β debounceTime
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)
);
Operators β takeWhile
ΠΠΌΠΈΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ° 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 )
);
Operators β combineLatest
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ combineLatest ΡΠ΅ΠΌ-ΡΠΎ ΠΏΠΎΡ ΠΎΠΆ Π½Π° promise.all. ΠΠ½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ΄Π΅Π»Π°Π΅Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΌΠΈΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°Π»Π΅Π΅, ΠΏΠΎΡΠ»Π΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΌΠΈΡΠ° ΠΈΠ· ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
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));
Operators β zip
Zip β ΠΆΠ΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠ΄Π΅Ρ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠΎ Π³ΡΡΠΏΠΏΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π°.
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));
Operators β forkJoin
forkJoinΒ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ, Π½ΠΎ ΠΎΠ½ Π΅ΠΌΠΈΡΠ½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π±ΡΠ΄ΡΡΒ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ (complete).
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);
Operators β map
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ map ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠΈΡΠ° Π² Π½ΠΎΠ²ΠΎΠ΅.
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)
);
Operators β share, tap
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ tapΒ — ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ side ΡΡΡΠ΅ΠΊΡΡ, ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Π£ΡΠΈΠ»ΠΈΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ share ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΈΠ· Ρ ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ΄Π΅Π»Π°ΡΡ Π³ΠΎΡΡΡΠΈΠΌ.
Π‘ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ. ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Subject.
ΠΡΡΠ»ΠΈ Π² ΡΠ»ΡΡ
Π ΡΡΡ Ρ ΠΏΠΎΡΠ΅Π» ΡΠ°Π΅ΠΊ ΠΏΠΈΡΡ. Π£ΡΠΎΠΌΠΈΠ»ΠΈ ΠΌΠ΅Π½Ρ ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ π
Π‘Π΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ subject-ΠΎΠ²
Π‘Π΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ subject-ΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΡΡΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π³ΠΎΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠ²Π»ΡΡΡΡΡ Π½Π΅ΠΊΠΈΠΌ Π³ΠΈΠ±ΡΠΈΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΡΠΏΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΎΠ»ΠΈ observable ΠΈ observer. Π’Π°ΠΊ ΠΊΠ°ΠΊ subject ΡΠ²Π»ΡΠ΅ΡΡΡ Π³ΠΎΡΡΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΡΠΎ ΠΎΡ Π½Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΏΠΈΡΡΠ²Π°ΡΡΡΡ. ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΡΠΎ ΡΡΠΎ:
- next β ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π½ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠΎΡΠΎΠΊ
- error β ΠΎΡΠΈΠ±ΠΊΠ° ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°
- complete β Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°
- subscribe β ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΏΠΎΡΠΎΠΊ
- unsubscribe β ΠΎΡΠΏΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΏΠΎΡΠΎΠΊΠ°
- asObservable β ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π² Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ
- toPromise β ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π² ΠΏΡΠΎΠΌΠΈΡ
ΠΡΠ΄Π΅Π»ΡΡΡ 4 5 ΡΠΈΠΏΠΎΠ² subject-ΠΎΠ².
ΠΡΡΠ»ΠΈ Π² ΡΠ»ΡΡ
ΠΠ° ΡΡΡΠΈΠΌΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ» 4, Π° ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΠΎΠ½ΠΈ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ. ΠΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π²Π΅ΠΊ ΠΆΠΈΠ²ΠΈ Π²Π΅ΠΊ ΡΡΠΈΡΡ.
ΠΡΠΎΡΡΠΎΠΉ Subject new Subject()
β ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ Π²ΠΈΠ΄ subject-ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ.
BehaviorSubject new BehaviorSubject( defaultData<T> )
β Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΠ°ΠΌΡΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΉ Π²ΠΈΠ΄ subject-ΠΎΠ². ΠΠ° Π²Ρ
ΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠ΅Π³Π΄Π° ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΌΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ΅. ΠΠ°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ value, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°.
ReplaySubject new ReplaySubject(bufferSize?: number, windowTime?: number)
β ΠΠ° Π²Ρ
ΠΎΠ΄ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π² ΡΠ΅Π±Π΅ Ρ
ΡΠ°Π½ΠΈΡΡ, Π° Π²ΡΠΎΡΡΠΌ Π²ΡΠ΅ΠΌΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
AsyncSubject new AsyncSubject()
β ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΒ complete. ΠΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°.
WebSocketSubject new WebSocketSubject(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>)
β Π Π½Π΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΌΠΎΠ»ΡΠΈΡ ΠΈ Ρ ΡΠ°ΠΌ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Π²ΠΈΠΆΡ. ΠΡΠΎ Π·Π½Π°Π΅Ρ ΡΡΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ ΠΏΠΈΡΠΈΡΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ.
Π€ΡΡ. ΠΡ Π²ΠΎΡ ΠΌΡ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π²ΡΠ΅, ΡΡΠΎ Ρ Ρ ΠΎΡΠ΅Π» ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ. ΠΠ°Π΄Π΅ΡΡΡ Π΄Π°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ. Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠΎΠ»Π΅Π·Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΡΡΠΈΠΌ ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JS: ΠΎΠ±Π·ΠΎΡ Π΄Π²ΠΈΠΆΠΊΠ°, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JS: ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ ΠΈ ΠΏΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ async / await ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Event Loop Π² JavaSript ΠΠ²ΠΎΠ»ΡΡΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ JavaScript Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ RxJS ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΎ Π½ΡΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ RxJS RxJS Observables Tutorial β Creating & Subscribing to Observables RXJS: Hot and Cold Observables ΠΠ»Π°ΡΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Observable. ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ. RxJS Operators By Example API List Π Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ Subject ΠΈ Π Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Π² RxJS
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com