αα½ααααΈβα’αααβααΆααα’ααααααΆα Sergey Omelnitsky αααα»αβααΆααααα αα·αααΌαααα»ααααΆαααααααα ααα αααα»αααΆααααα αααΆαααααΆαααΎααΆαααααααααααα·ααΈαααααΆαααααα·αααα ααΆααααααααααααα»αααΆααα·ααΆαα’αααΈα’ααααΆααα αααα»α 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 (αα»αααΆα 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 ms ααΆαααααααα»ααα αααααα·ααΈαααααααααααΉααααα αα α αΎαααΆαα callback cb1 αα αααα»ααα½α callbackα
12) ααααα·ααα»αααααΉαααα·ααΆααααααα»αααΆα cb1 ααΈαα½αα α αααα‘αααααα·αα αΎαααΆααααΆαα ααΎαααααΆαα α α
13) αα»αααΆα cb1 ααααΌαααΆαααααα·ααααα· α αΎααααααα console.log('cb1') αα αααα»α call stack α
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" α
- ααΆααααααααΆαααα α»αα’αΆα ααΆαααΉαααααΆαα
- α’ααααα·αα’αΆα αααα‘ααααααααααΆαα½αααΉαααΆααααα‘αααααα·αααΆαααα
ααΆαα½αααΉαααΆαααααααα 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
ααα»ααααααΆααααααΆααΆαααααααααααααααΆα ααΆα§ααΆα ααα ααΆααααααΆαα·αα’αΆα αα»αα ααααΆαααααΎααααΆαααΆαααΆαααΆαα½α tambourine α αΎαα’αααΈαααααααΆαααααα»ααααααΊααΆααΆααααΎαααΆαααΆαα½αααΉαααααααα½αα
ααΆααΆααααααΎαααΆαα ααΎαααΆαα αΌααα αα·αααΆαααααααααααα·ααΈαααααΆαααααα·αααααααΆααααΌαα αα»αααααΆαα? ααΆααααΆαααα’ α’αααα’αΆα αα ααααΎαααααα αα·αα’αααΈααΆ α αΎαααααααααα’αΆαααααααα α αΎααααα»αααΉαααααα
αααααα·ααΈαααααΆαααααα·ααααβααΊααΆααααΌααααΆαααααααααααα·ααΈααααααααααΎααα αΌααα·αααααα αα·αααΆαααααΆααααααΌαααΆαααααααααααΆαα ααΌααααα‘ααααΎαα±ααααΆααααα αααΆααααΆααΎααααααΈααα·ααααααααΊααΆα’αααΈα
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ
const input = ducument.querySelector('input');
const eventsArray = [];
// ΠΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ² eventsArray
input.addEventListener('keyup',
event => eventsArray.push(event)
);
α αΌααααααααΆααΎαααΆααααααααααα αΌαα ααΎααααα»ααααααΎαα’αΆαααα½α α αΎααααααΆααααΆαα keyup ααααααΉαααα·ααΆααααααα αΌα ααΎαααΉααααααΆαα»αααααΉαααα·ααΆααααα αααα»αα’αΆααααααααΎαα αααα»ααααααΆαα½αααααΆααααααα»αα ααααααααααΆααααΆα’αΆααααααααΎαααααΌαααΆαααααααααΆααααααααΆ i.e. αααααααααααααααΉαααα·ααΆααααααααααΊααααΆααααααααααααααααΉαααα·ααΆααααα»ααα α’αΆααααααααααΊααΆααααΌααΆααααααααα αΌααα·αααααα ααα»ααααααΆαα·αααΆααααΆααα αΌαααα ααΎααααΈα±ααα’αΆαααααααααΌαααΆαααα α ααΆααααααΈαααααα»ααααα·ααΆα ααΆααααΌαααα’αΆα ααΌαααααΉααααα’αα·αα·αααα½αα ααα½αααΆαα·ααααααααααΈααΆααααααααΆα ααΌα ααααααΎαααααααα·αααααααααα αΌαα
ααααααΈααα·αααααα
const { interval } = Rx;
const { take } = RxOperators;
interval(1000).pipe(
take(4)
)
ααα αΌαβααΊααΆα’αΆαααααα·αααααααααααΆαααααααααΆααααααααΆαααα’αΆα αααα αΆαααΆαα·ααααααααΆαααααΆααααααΌαα α₯α‘αΌααααααααΎαααΆααΎααΆααΆααααα½αααα»ααααΆαααα»αααΆααααααααΌαααααααααααΆααα½ααααααΌαα±ααα α ααααΉαααα·ααΆαααααΆα αααΎααα αααα»ααααααααααααααααΌαα ααΎαααααΆααααααΆαααααααΈα α αΎαααΆααΉαααΌαααααΉααααααΎααα αααααΆαααΆαααααΆααααααΌαα α αΎααααααΆααα RxJs α’αΆα ααααΎααΆααΆαα
RxJS ααΊααΆαααααΆααααααααΆααααααΎααΆαααΆαα½ααααααα·ααΈα’ααααΆα αα·ααααααα·ααΈααα’ααααΎααααΉαααα·ααΆααα αααααααΎααααΆαααααα’αΆα ααααααααΆαα αααααΆααααααααααΌαααααααααΌαααααΆα α’αΆα α’αααααααΆα, αααααααααα½αααΆα αααΎα (α’αααααααααααΆααα, α’ααααααα αααΆααα·ααΆα, αα»ααα·ααααΆ) αα·αααααα·ααααα·αααααααΆααααααΎααΆαααΆαα½αααααΉαααα·ααΆααα ααΌα ααΆααΆαα½αααΉαααΆααααααΌα (αααααΈ ααααα ααΆααααααα ααΆαα αα·αααααααααααΆααΈ JavaScript Array) α
α αΌαααΎααααααΈααααααα·αααΆααΌαααααΆααααααααΆααααααα
α’αΆα ααααααααΆα, α’ααααααααα, α’αααααα·α
Observable ααΊααΆααααααααΌαααααΆαααααΌααααααΎαααΉαααΎαα ααααΆαααααααΆααααααααααΆααααααΆαα’αα»αααα RxJs α ααΆααααΌαααΆαααααΆααααΆαα½αααααααΈααααα’αΆα ααααααααΆα αααα’αΆα ααΆαααΆααααααααΎαα·ααΈααΆαααααααΆαα
Observable α’αα»ααααααααααΆααααα½ααααααΆααααΆααααααΎααα αα α»ααααααααΆα αααα α ααΆ α’αααααααααααΆααα. αααααααααααααααααΆααα’αααααααααααΆαααααααΌαααΆαααα α ααΆ α’αααααα·α. αααα’αΆα ααΆα’αΆαα α’αααααααΎα‘αΎααα·α αααααααααΆα ααααααααααααΉαααα·ααΆααααα½αα ααα½αααα ααΌα ααααβααΎαβα’αΆα βαα·ααΆαβααΆαβααΆβ Observable ααΊβααΆβ conductor αααΆαβ Producer αα·α Observerα
Observable αααααααααααααΉαααα·ααΆααα Observer ααΈααααααα
- αααααΆαα - αα·ααααααααααΈα
- error - ααα α»ααα½αααααα·αααΎααααΆαααααα αααααααΆαααααΈααΎαααααα½αα ααααΉαααα·ααΆαααααααααααααααααα’αααΈααΆααααα ααααααααΆααα
- αααααα β αααααΆα’αααΈααΆααααα ααααααααΆααα αααααΆααααααΆααΉααα·αααΆααα·ααααααααααΈαααααα
αααααΎαααΆααααα αΆαα
αα αααα αΆααααααΎαααΎαααΉαααααΎαααΆαααααα 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 α ααΎαααΉααα·αα·αααααΎααα½αα ααα½ααααααααα·αααααα»α α αΎαααααααΆααααα’α·αααααααα’αααΈααααα·ααααα·ααα’αΆα ααααΌαααΆαααααΎααααααααΎαααααααΆαααα αααα»αααααααΆαααΆαααααααααα
ααααα·ααααα·αα - αα
α αΌαα αΆααααααΎαααΆαα½αααααα·ααααα·αααααα½αααα ααΆαααααΎα Observable αααααα’ααααΎαααααααΆααααα
ααααα·ααααα·αα - ααααα
ααααα·ααααα·ααααααα ααΌα ααααααααααΆααααα αΆα αααααααααΆααααααΈαα ααααα·αααΎααααα·ααααα·αααααα‘αααα·α ααΆααΉααααααααααααααα
ααααα·ααααα·αα - αα
αα - αααααααααα ααα½α emitters αααααΆααααΈααααααααααα‘αΆααααα ααα
ααααα·ααααα·αα - 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)
);
ααααα·ααααα·αα - takeWhile
αααα ααααααααα αΌαααα takeWhile αααα‘αααα·ααα·α αααααΆααααΈαααααΆαααααΆαααΈαααααααα‘αΆαα
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 )
);
ααααα·ααααα·αα - αα½ααααα αΌαααααΆα α»αααααα
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ 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));
ααααα·ααααα·αα - 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));
ααααα·ααααα·αα - forkJoin
forkJoin ααααααΆαααααααααα‘αΆαααααα ααα»ααααααΆαααα ααααααααα αααααααααααααα‘αΆαααΆααα’ααααααΌαααΆααααα ααα
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);
ααααα·ααααα·αα - αααααΈ
ααααα·ααααα·ααααααααααααααΈαααααααααααα emitter αα ααΆααααΈαα½αα
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)
);
ααααα·ααααα·αα - α ααααααα, ααα
ααααα·ααααα·αααααΆαααΈαα’αα»ααααΆαα±ααα’αααααααΎαααααααΆαα αααααΊαααααααΆαααΆαα½αααααα·ααααααΆαααααααααΆααα
ααααα·ααααα·ααα§αααααααααΎααααΆααα αααααααα’αΆα ααααααααΆαααααααΈααααααΆαααα ααΆαααα α
ααΎαααΆααααα ααααΆαα½αααααα·ααααα·ααα α αΌααααααα αααααΆαααα
αα·αααααΆααα
αα½α α αΎααααα»ααααα ααΉαααα αααα»ααα»αααααΆααααΉαα§ααΆα αααααΆαααααπ
αααα½ααΆααααααΆααα
αααα½ααΆααααααΆαααααΊααΆα§ααΆα αααααααΆααααααα αΌααααα α ααααΆααααΆαααααααΊααΆααααααααΌαααΆαααααααΎααα½αααα»ααααααααΆαααααΆααΆα’ααααααααα αα·αααααααα αααααΆααααααΆαααααΊααΆααΏααααα ααα»α α αΆαααΆα αααααΌααααααΆαααΈααΆα ααααα·αααΎααΎααα·ααΆαα’αααΈαα·ααΈααΆαααααααααΆαααααα ααΆαααααααΊα
- αααααΆαα - ααΆαααααααα·ααααααααααΈαα ααααααΈα
- ααα α»α - ααα α»ααα·αααΆααααα αααααααααα‘αΆα
- αααα αα - ααΆααααα αααααααααααα‘αΆα
- ααΆα - ααΆαααΆαααααΆα
- αααααΆα - αααααΆαααΈααααααΈα
- asObservable - ααααααααΆααα ααΆα’αααααααααααΆααα
- to Promise - ααααααααα ααΆααΆααααααΆ
αα»ααα·ααααΆααΆα α€ α₯ ααααααα
αα·αααααΆααα
ααΆαβααα»ααα 4 ααΆααβαααα»αβαα·ααΆαβαα βααΎβααααααΈα ααα»ααααβααΆβααΆαβααααΆαβααΆβαα½αααβααΆαβααααααβααααΆααβαααα ααΌα ααααα½ααααα·ααΆαααΆααααα αα·ααααα
αααααΆαααααΆαααα new Subject()
- αααααααα»ααα·ααααΆααΆαααααααα»αα αααααΎααααααααΆααααΆαααΆααααααα αααααΌαααααααααααα½αααΆααααααααΆααααΈααΆαααΆαα
αααααΆαααα’αΆαααααα·αα·ααΆ new BehaviorSubject( defaultData<T> )
- ααΆααααα·ααααααααα»α αααααααααααΆαααααΌαα
αααα»αα ααΆααααα
αΌααααααααααααΆαααΎαα ααααααααααΆαα»ααα·αααααααααααα αΆα
α»αααααα αααααααΌαααΆααααααΌααα
αααααΆαα ααααΆαααααααααΆααα·ααΈααΆααααααααααααΆαααααααααααααα ααααααααααααααααααααα
αα
α»ααααααααα
ααααα
α
αΆααα‘αΎααα·ααααααΆααα new ReplaySubject(bufferSize?: number, windowTime?: number)
- ααΆααααα
αΌαα’αΆα
ααααΆαααααΎαααΆα’αΆαα»αααααααΈαα½αααα αααααα·ααααααα’αΆααααααααααααααααΆααΉααααααΆαα»ααα
αααα»ααααα½αααΆ α αΎαααΆααΎαααΈααΈααα
ααααααααΎαααααΌαααΆαααΆαααααΆααααααΌαα
AsyncSubject new AsyncSubject()
- ααααΆαα’αααΈααΎαα‘αΎααα
αααααΆααα α αΎααααααααΉααααααααααα·αααααααααααα ααΆαβααβαααααβα
α»ααααααβααβααΆαβααααΆαβααα»αααααβααΉαβααααΌαβααΆαβαααα‘ααβααβαα·αα
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 Π Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ Subject ΠΈ Π Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Π² RxJS
ααααα: www.habr.com