á¡á¬ážáá¯á¶ážáááºá¹ááá¬áá«á Sergey Omelnitsky á áááºááœááºáá±áá«áááºá áááŒá¬áá±ážáá®á JavaScript ááœáẠasynchrony á¡ááŒá±á¬ááºážááŒá±á¬áá²á·ááá·áº reactive programming ááŸáá·áºáááºáááºáá±á¬ stream áá áºáá¯ááᯠáááŒá¬áá±ážáá®á ááŒá¯áá¯ááºáá²á·áááºá áá®áá±á· áá®á¡ááŒá±á¬ááºážá¡áá¬áá²á· áááºáááºááŒá®áž ááŸááºáá¬ážáá¬ážáá»ááºáá«áááºá
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠá¡áááá¡ááŒá±á¬ááºážá¡áá¬ááᯠáá áááºáá®á áá»áœááºá¯ááºááá¯á·ááẠááááºáááºááŸááºá á¯áá áºáᯠááŒá¯áá¯ááºááẠááá¯á¡ááºáá«áááºá áá®áá±á¬á· á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááœá±áá²á·á ááŒáá¡á±á¬ááº- stack áá²á· a queue ááá¯áᬠáá¬áá²á
áá¯á¶áá° LIFO á¡ááŒá±áá¶ááŒáá·áº áá±á¬ááºáá¯á¶ážáááºá áááááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááá°áá¬ážáá±á¬ á á¯á ááºážááŸá¯áá áºáá¯ááŒá áºáááºá
ááŸáá·áº ááŒááºá ááºáá»á¬ážááᯠááááááºá áááááœáẠFIFO á¡ááŒá±áá¶ááŒáá·áº ááá°áá¬ážáá±á¬ á á¯á ááºážááŸá¯áá áºáá¯ááŒá áºáááºá
á¡áá¯áá±á áááºááŒáá¡á±á¬ááºá
JavaScript ááẠsingle-threaded programming language áá áºáá¯ááŒá áºáááºá ááá¯ááá¯áááºááŸá¬ execution á thread áá áºáá¯áááºážááŸáá·áº execution á¡ááœáẠáááºážá á®áá¬ážááá·áº functions áá»á¬ážáá±á«áºááœáẠstack áá áºáá¯áá¬ááŸááááºá ááá¯á·ááŒá±á¬áá·áºá JavaScript ááẠáá áºááŒáááºáá»áŸáẠáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯áᬠáá¯ááºáá±á¬ááºááá¯ááºááŒá®áž á¡ááŒá¬ážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááẠáááºážááá¯á·ááᯠáá±á«áºááá·áºá¡áá»áááºá¡áá stack áá±á«áºááœáẠáááºážááá¯á·áá¡ááœáá·áºááᯠá á±á¬áá·áºááááºááŒá áºáááºá
stack ááá¯áá±á«áºáá«á ááá¯ážááŸááºážá áœá¬ááŒá±á¬ááá»áŸáẠáá»áœááºá¯ááºááá¯á·áá±á¬ááºááŸááá±ááá·áº áááá¯ááááºááŸááá±áá¬ááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠááŸááºáááºážáááºááá·áº áá±áá¬ááœá²á·á ááºážáá¯á¶ááŒá áºáááºá áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááá¯á· áá»áœááºá¯ááºááá¯á·áááºáá±á¬ááºáá«áá áááºážáá¡áááºááᯠstack áááááºááá¯á·ááœááºážáá«á áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯á០áá»áœááºá¯ááºááá¯á·ááŒááºáá¬áá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠstack á០ááááºáá¯á¶ážááŒááºá ááºááá¯ááœáá·áºááŒá®áž áá¯ááºáá±á¬ááºáá»ááºáá¯áá±á«áºááá·áºáá±áá¬ááœáẠááŒááºááŒá®áž á¡áá¯á¶ážáááºáá«áááºá áá«á stack áá¯ááºááá¯ááºááá»áŸáá«áá²á ááá¯áááºáž á¡ááœááºá áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ áá±ážááœááºážáá áºáá¯ááŒá áºáááºá ááá¯á·áá±á¬áẠJavasScript ááœáẠasynchrony ááẠáááºááá¯á·á¡áá¯ááºáá¯ááºááááºážá
á¡ááŸááºááŸá¬á stack áá»á¬ážá¡ááŒááºá ááá±á¬ááºáá¬áá»á¬ážááẠWebAPI áá¯áá±á«áºáá±á¬ áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážá¡ááœáẠá¡áá°ážáááºážá á®áá áºáá¯ááŸááááºá stack ááᯠáá¯á¶ážáááŸááºážááŒá®ážááŸáᬠá€áááºážá á®á¡ááœááºážááŸá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡á ááºááá¯ááºáá¯ááºáá±á¬ááºáá«áááºá ááŒá®ážááŸáᬠáááºážááá¯á·ááᯠááœááºáá»ááºáááºá¡ááœáẠstack áá±á«áºááá¯á· áááºážá á®ááŒááºážá០ááœááºážááá¯á·áá«áááºá áá±á¬áá±á¬ááẠstack ááœáẠá¡áááºážáá¯á¶áž á¡á áááºá¡ááá¯ááºážáá áºáá¯ááŸááá±áá«áá áááºážááá¯á·ááᯠstack ááá¯á· ááá·áºááááá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á¡áá»áááºááœááºááŒááºážááŒáá·áº áá¯ááºážáá±á«áºááá¯ááŒááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠá¡áá»áááºááŸáá·áºáááŒá±ážáá® ááááá»áá±á¬ááŒá±á¬áá·áºá áá¯ááºáá±á¬ááºáá»ááºááẠááŒáá·áºáá±áá»áááºááœáẠáááºážá á®á០stack ááá¯á· ááá±á¬ááºááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
á¡á±á¬ááºáá« á¥ááá¬ááᯠááŒáá·áºááŒá®áž áááºážá á¡ááá·áºááá·áº áá¯ááºáá±á¬ááºááŸá¯ááᯠá áááºááŒáá«á áá¯á·á á áá áºááŸá¬ áá¬ááœá±ááŒá áºááá²ááá¯áá¬ááá¯áááºáž ááŒáá·áºááŒáá¡á±á¬ááºá
console.log('Hi');
setTimeout(function cb1() {
console.log('cb1');
}, 5000);
console.log('Bye');
1) áá¬ááŸáááŒá áºáá±ážáá«áá°ážá ááá±á¬ááºáᬠááœááºááá¯ážááŸááºážááẠááŸááºážáááºážáááºá áá±á«áºááá¯ááŸá¯á¡á á¯ááẠááá¬ááŒá áºáá±áááºá
2) ááá¯á·áá±á¬áẠcommand console.log('Hi') ááᯠcall stack ááœáẠááá·áºáá¬ážáááºá
á) ááŒá®ážááŒáá·áºá á¯á¶áááºá
4) ááá¯á·áá±á¬áẠconsole.log('Hi') ááᯠcall stack á០áááºááŸá¬ážáááºá
5) ááᯠcommand setTimeout(function cb1() {⊠}) ááá¯á·ááœá¬ážáá«á áááºážááᯠáá±á«áºááá¯ááŸá¯á¡á á¯ááœáẠááá·áºááœááºážáá¬ážáááºá
6) setTimeout(function cb1() {⊠}) command ááᯠáá¯ááºáá±á¬ááºáááºá ááá±á¬ááºáá¬ááẠááẠAPI á áá áºá áááºáá áºááá¯ááºážááŒá áºáá±á¬ á¡áá»áááºááá¯ááºážáááááá¬ááᯠáááºáá®ážáááºá ááŸá áºáá áºááŒáá¯ááá¯ááœá² ááŒá¯áá¯ááºáááºááŒá áºáááºá
7) setTimeout(function cb1() {... }) command ááẠáááºážáá¡áá¯ááºááŒá®ážááŒá±á¬ááºááŒá®áž call stack á០áááºááŸá¬ážááá¯ááºáá«áááºá
8) command console.log('Bye') ááᯠcall stack ááœáẠááá·áºáá¬ážáááºá
9) console.log('Bye') á¡áááá·áºááᯠáá¯ááºáá±á¬ááºáááºá
10) command console.log('Bye') ááᯠcall stack á០áááºááŸá¬ážáááºá
11) á¡áááºážáá¯á¶áž 5000 ms áá»á±á¬áºááœááºááŒá®ážáá±á¬ááºá timer ááẠáááºááá¯ááºážááŒá®áž callback cb1 ááᯠcallback áááºážá á®ááœáẠáá±áá¬áá»áá±ážáááºá
12) event loop ááẠfunction cb1 ááᯠcallback queue ááŸáá°áᬠcall stack ááœáẠáá¬ážáá±ážáááºá
13) Function cb1 ááᯠáá¯ááºáá±á¬ááºááŒá®áž call stack ááœáẠconsole.log('cb1') ááᯠáá±á«ááºážááá·áºáááºá
14) console.log('cb1') á¡áááá·áºááᯠáá¯ááºáá±á¬ááºáááºá
15) command console.log('cb1') ááᯠcall stack á០áááºááŸá¬ážáááºá
16) Function cb1 ááᯠcall stack ááŸáááºááŸá¬ážáááºá
ááá¯ááºážááá áºááá¯ááºáᬠá¥ááá¬ááᯠááŒáá·áºááŒáá«á áá¯á·á
áá±á¬ááºážááŒá®á JavaScript ááœáẠasynchrony ááᯠáááºáá²á·ááá¯á· á¡áá±á¬ááºá¡áááºáá±á¬áºáááºááᯠáá»áœááºá¯ááºááá¯á· ááŒáá·áºááŸá¯áá²á·áááºá á¡áᯠasynchronous code áá²á· ááá·áºáá²ááŒá áºá ááºá¡ááŒá±á¬ááºáž á¡ááá¯áá»á¯á¶ážááŒá±á¬ááŒáá¡á±á¬ááºá
á¡ááŒáá¯ááºá¡ááá¯áẠáá¯ááºá ááá·áºáá²ááŒá áºá ááºá
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 ááœáẠáá»áœááºá¯ááºááá¯á·áááá¬ážááá·áºá¡ááá¯ááºáž Asynchronous programming ááᯠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áºáᬠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá«áááºá áááºážááá¯á·ááᯠá¡ááŒá¬ážáá±á¬ ááááºážááŸááºáá»á¬ážáá²á·ááá¯á· á¡ááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯á· áá±ážááá¯á·ááá¯ááºáááºá á€ááá¯á·ááŒáá·áº ááŒááºáááºáá±á«áºááá¯ááŸá¯áá»á¬áž ááœá±ážááœá¬ážáá¬áá²á·áááºá áááºážáááºážááŸá¯á ááœááºážááœá±ážááŸá¯ááŸáá·áº áááºážáááºážááŸá¯á¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážááá·áºááá¯ááºá¡á±á¬áẠáááºážááẠá¡á±ážááŒá áá»á±á¬áºá áá¬áá±á¬ááºážááŒá®áž áá á¬ážá áá¬ááŒá áºáááºá á¡áááºááŒá±á¬ááºá·? ááá¯ážááŸááºážáá«áááº-
- áá¯ááºá ááŸá¯ááºááœá±ážááŸá¯áá»á¬áž ááá¯ážáá¬áááºááŸáá·áºá¡áá»áŸ ááá±á¬áá»ááºááẠáá»ááºááŒááºá áœá¬ ááááºáááŸá¬ážá áááºáá«ááá²áá² á¡ááá¯ááºáá¯ááºááœááºáá»á¬ážá¡ááŒá áºááá¯á· áá»ááºááŒááºá áœá¬ ááŒá±á¬ááºážáá²ááœá¬ážááẠ- "ááá²ááᯠááŒááºáá±á«áºááŒááºáž"á
- ááá¯ááºááœááºááŸá¯ á¡ááŸá¬ážááẠá¡ááœááºááá° ááœá²áá»á±á¬áºááá¯ááºáááºá
- ááŒááºáá¬ááŒááºážááŒáá·áº áááºááẠá áá¬ážáááºáá»á¬ážááᯠááŒááºáááááá¯ááºáá«á
áááááœá± ááœááºážáá¬ážáá¬áá¬áá²á·á¡áá»áŸ á¡ááŒá±á¡áá±ááœá± áááºážáááºážááá¯áá±á¬ááºážáá¬áááºá
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 chains áá»á¬áž áá±á«áºáá¬áááºá
- á¡ááŸá¬ážáá»á¬ážááᯠáááºážááẠáá®ážááŒá¬ážáááºážáááºážáá áºáᯠáá±á«áºáá¬áááºá
- Promise.all ááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááá¯ááºááŒá±ááᯠááá·áºááœááºážáá¬ážáááºá
- async/ait ááᯠá¡áá¯á¶ážááŒá¯á nested asynchrony ááᯠááŒá±ááŸááºážááá¯ááºáá«áááºá
áá«áá±ááá·áº áááááááºááœá±ááŸá¬ ááá·áºáááºáá»ááºááœá±ááŸááááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºáá¬ááŒáá·áº áááŒááºážáááŸááá² ááááá áºáá¯á¡á¬áž áá»ááºááááá«á á¡áá±ážááŒá®ážáá¯á¶ážááŸá¬ áááºááá¯ážáá áºáá¯ááŸáá·áº áá¯ááºáá±á¬ááºáá±ááŒááºážááŒá áºáááºá
áá±á¬ááºážááŒá®á áá»áœááºá¯ááºááá¯á·ááẠáá¬ááºááŒá¯ááŸá¯ áááá¯ááááºááᯠáá»á±á¬ááœá±á·á áœá¬ áá»ááºážáááºááŒá®ážááŒá®á áááºáááºážáá±ááŒá®áá¬áž? áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á áááºáž áááºáááºáááºáá±á¬ááºá á¡á²áá«ááᯠá ááºážá á¬ážááŒá®áž á á¬áá»á¬ážáá»á¬ážáááºááá¯á· ááŒááºáá¬ááá¯ááºáááºá ááŒá®ážáá±á¬á· áá« áááºáá¯ááºáááºá
Reactive programmingâáá±áá¬á á®ážáááºážááŸá¯ááŸáá·áº ááŒáá·áºááœá¬ážááŸá¯ááŒá±á¬ááºážáá²ááŒááºážááá¯á·ááᯠá¡á¬áá¯á¶á áá¯ááºááá·áº áááá¯ááááºáá±ážááœá²ááŒááºážááá¯ááºáᬠáá«áá¬ááá¯ááºážáá áºáá¯ááŒá áºáááºá áá±áá¬á á®ážááŒá±á¬ááºážááá¯áᬠáá¬áá²ááá¯áá¬ááᯠá¡áá®ážáááºáá±á·áá¬ááŒáá·áºáá¡á±á¬ááºá
// ÐПлÑÑаеЌ ÑÑÑÐ»ÐºÑ ÐœÐ° ÑлеЌеМÑ
const input = ducument.querySelector('input');
const eventsArray = [];
// ÐÑÑОЌ кажЎПе ÑПбÑÑОе в ЌаÑÑОв eventsArray
input.addEventListener('keyup',
event => eventsArray.push(event)
);
áá»áœááºá¯ááºááá¯á·ááœáẠááá·áºááœááºážá¡ááœááºáá áºáá¯ááŸááááºááᯠá áááºáá°ážááŒáá·áºááŒáá«á áá¯á·á áá»áœááºá¯ááºááá¯á·ááẠarray áá áºáá¯ááᯠáááºáá®ážáá±ááŒá®áž input event á keyup ááá¯ááºážá¡ááœáẠevent ááᯠáá»áœááºá¯ááºááá¯á·á array ááœáẠááááºážáááºážáá«áááºá áá áºáá»áááºáááºážááŸá¬áááºá áá»áœááºá¯ááºááá¯á·á array ááᯠá¡áá»áááºá¡á¬ážááŒáá·áº á á®áá¬ážááŒááºážááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á áá±á¬ááºááá¯ááºážááŒá áºáááºáá»á¬ážáá¡ááœáŸááºážááááºážááẠá¡á á±á¬ááá¯ááºážá¡ááœáŸááºážááááºážáá»á¬ážááẠááá¯áá»á¬ážáááºá ááá¯ááá¯á·áá±á¬ array ááẠáá±áá¬á á®ážáááºážááŸá¯á ááá¯ážááŸááºážáá±á¬áá¯á¶á á¶áá áºáá¯ááŒá áºáá±á¬áºáááºáž áááºážááẠá á®ážáááºážááŸá¯áá áºáá¯ááá¯ááºáá±ážáá«á á€á¡áááºážá¡áá»ááºážááᯠá ááºážáá»á±á¬ááºážáá áºáá¯áᯠáá¯á¶ááŒá¯á¶á áœá¬áá±á«áºááá¯ááá¯ááºáááºá áá±áá¬á¡áá áºáá±á¬ááºááŸááá¬ááŒá±á¬ááºáž á á¬áááºážááœááºážáá°áá»á¬ážá¡á¬áž áá áºáááºážáááºážááŒáá·áº á¡áááá±ážááá¯ááºááááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá á®ážáááºážááŸá¯á á¡áááá¹áá«ááºááᯠáá±á¬ááºááŸááá¬áá«áááºá
áá±áá¬á á®ážááŒá±á¬ááºáž
const { interval } = Rx;
const { take } = RxOperators;
interval(1000).pipe(
take(4)
)
á á®ážáááºážááŸá¯âáá±áá¬ááẠááŒá±á¬ááºážáá²ááœá¬ážááŒá±á¬ááºáž ááœáŸááºááŒááá¯ááºááá·áº á¡áá»áááºá¡ááá¯áẠá á®áá¬ážáá±á¬ áá±áᬠarray áá áºáá¯ááŒá áºáááºá áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááẠáá¯ááºá ááá°áá®áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááŸá ááŒá áºáááºáá»á¬ážá áœá¬ááᯠáá±á«áºááá¯ááẠááá¯á¡ááºááá·áº áá¯ááºáá±ážááẠáááºáá»áŸá¡áááºááŒá±áá¬áááºááᯠá áááºáá°ážááŒáá·áºáá«á áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ááᯠá á¬áááºážááœááºážáá¬ážááŒá®áž á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá áºáá±á«áºáá¬ááá·áºá¡áá«ááœáẠáá»áœááºá¯ááºááá¯á·ááᯠá¡ááŒá±á¬ááºážááŒá¬ážáá«áááºá RxJs á á¬ááŒáá·áºááá¯ááºá áá«ááᯠáá¯ááºááá¯ááºáá«áááºá
RxJS á á±á¬áá·áºááŒáá·áºááá¯ááºáá±á¬ á á®áááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒáá¯ááºá¡ááá¯áẠááŸáá·áº á¡ááŒá áºá¡áá»ááº-á¡ááŒá±áᶠáááá¯ááááºáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠá á¬ááŒáá·áºááá¯ááºáá áºáá¯ááŒá áºáááºá á á¬ááŒáá·áºááá¯ááºááẠá¡ááŒá±áá¶á¡áá»áá¯ážá¡á á¬ážááᯠáá±á¬ááºáá¶á·áá±ážáááºá á á±á¬áá·áºááŒáá·áºáá±á·áá¬ááá¯ááºáááºá¡áááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬ (áá±á·áá¬áá°á á á®á ááºáá°áá»á¬ážá áá¬áá¬áááºáá»á¬áž) ááŸáá·áº á á¯á ááºážááŸá¯áá»á¬ážáá²á·ááá¯á· ááŒá áºáááºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáááºá¡ááœáẠá¡á±á¬áºááá±áá¬áá»á¬áž (ááŒá±áá¯á¶á á á áºáá¯ááºá áá»áŸá±á¬á·áá»á ááá¯ááºáž ááŸáá·áº JavaScript Array á០á¡áá¬ážáá°áá»á¬áž)á
á€á á¬ááŒáá·áºááá¯ááºá á¡ááŒá±áá¶ááá±á¬ááá¬ážáá»á¬ážááᯠáá¬ážáááºááŒáá«á áá¯á·á
Observableá Observer, áá¯ááºáá¯ááºáá°
Observable ááẠáá»áœááºá¯ááºááá¯á· ááŒáá·áºááŸá¯áááá·áº ááááá¯á¶áž á¡ááŒá±áᶠá¡áá»áá¯ážá¡á á¬áž ááŒá áºáááºá á€á¡áááºážááœáẠRxJs á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á á¡áááá¡ááá¯ááºážáá«ááŸááááºá á á¬áááºážááœááºážááŸá¯áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á á á¬áááºážááœááºážááá¯ááºááá·áº ááŸá¯ááŒááºááá¯ááºáá±á¬ áá¯ááºááœáŸáá·áºááŸá¯ááŸáá·áº áááºá ááºáá±áááºá
Observable ááẠá¡ááºááááºáá»á¬ážáááºáá®ážáááºá¡ááœáẠá¡áá±á¬ááºá¡áá°áá±ážááá·áº ááá¹ááá¬ážáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±á¬ááºáᬠáááºážáá¯áá±á«áºáááºá áá±á·áá¬áá°. Observer á¡ááœáẠá¡áááºážá¡ááŒá áºáááºááá¯ážáá»á¬ážááᯠáá±á«áºáááºá áá¯ááºáá¯ááºáá°. áááºážááẠarrayá iteratorá web socketá á¡áá»áá¯á·áá±á¬ event á¡áá»áá¯ážá¡á á¬ážáá»á¬áž á áááºááá¯á· ááŒá áºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº Observable ááẠProducer ááŸáá·áº Observer ááŒá¬ážááœáẠconductor ááŒá áºáááºáᯠááá¯ááá¯ááºáááºá
Observable ááẠObserver ááŒá áºáááºáá¯á¶ážáá»áá¯ážá¡á¬áž ááá¯ááºááœááºáááº-
- áá±á¬ááºáá áºáᯠ- áá±áá¬á¡áá áº
- error â ááŒáœááºážáá»ááºáá áºáá¯ááŒá±á¬áá·áº sequence ááŒá®ážáá¯á¶ážááœá¬ážáá«á á¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááŒá áºáááºá á€ááŒá áºáááºááẠá¡á á®á¡á á¥áºááŒá®ážá á®ážááŸá¯ááá¯áááºáž ááá¯ááá¯áááºá
- ááŒá®ážááŒá±á¬ááºááẠâ á¡á á®á¡á á¥áºááŒá®ážá á®ážááŸá¯á¡ááŒá±á¬ááºáž á¡áá»ááºááŒáá«á ááá¯ááá¯áááºááŸá¬ áá±áá¬á¡áá áºáá»á¬áž ááŸááá±á¬á·áááºááá¯ááºáá«á
áá®ááá¯ááᯠááŒáá·áºáá¡á±á¬ááºá
á¡á ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºááá¯ážáá»á¬áž 1á 2á 3 ááŸáá·áº 1 á áá¹ááá·áºááŒá®ážáá±á¬áẠáá¯ááºáá±á¬ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠ4 ááá¯áááŸáááŒá®ážáá»áœááºá¯ááºááá¯á·áá á®ážááŒá±á¬ááºážááá¯á¡áá¯á¶ážáááºáááá·áºáááºá
á¡áá»ááºááŒá®ážááœá±ážááá¯ááºáááááºá
ááŒá®ážáá±á¬á· á¡á²áá«ááᯠáá±ážáá¬ááẠá á¬áá±ážáá¬á ááá¯á áááºáááºá á¬ážááá¯á·áá±á¬ááºážááŸááºáž áááá¬áááºá ð
subscription
áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááœáŸáá·áºááŸá¯ááᯠá á¬áááºážááœááºážááá·áºá¡áá« á¡áááºážáá áºáá áºáᯠáááºáá®ážáá«áááºá ááŒá±ážáá±ážááœááºážáááºážáááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á á á¬áááºážááœááºážááŸá¯ááŒá¯ááºááẠá áœááºážáááºááᯠáá±ážáááºá ááŸá¬áá°ááŸá¯áá»ááº. áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á á á¬áááºážááœááºážááŸá¯áá»á¬ážááá¯áááºáž á¡á¯ááºá á¯ááœá²á·ááá¯ááºáá«áááºá áá±á«ááºáž. áá±á¬ááºážááŒá®á áá»áœááºá¯ááºááá¯á·ááẠá á¬ááœá²áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡á¯ááºá á¯ááœá²á·ááá¯ááºáááºááŸá¬ áá¯áá¹ááááŸááááºá ááá¯áááºááŸá¬áž. áá±á«ááºážááá·áºááŒááºážááŸáá·áº áááºááŸá¬ážááŒááºážáááºážáááºážáá»á¬ážááẠá¡ááŒá¬ážá á¬áááºážááœááºážááŸá¯ááᯠááá·áºááœááºážááŸá¯á¡ááŒá Ạáááºáá¶áááºá á á¬áááºážááœááºážááŒááºážá០áááºááá¯ááºážááá·áºá¡áá«á áááºážááá¯á·ááẠá á¬áááºážááœááºážááŸá¯á០áááºáá»ááºááŒááºážáááºážáááºážááᯠáá±á«áºááá²á·ááá¯á· ááá±ážá á¬áááºážááœááºážááŸá¯á¡á¬ážáá¯á¶ážááᯠá á¬áááºážááœááºážááŸá¯á០áááºááá¯ááºážááŒá±á¬ááºáž áááááŒá¯á á±ááá¯áá«áááºá áááºáá¯ááºáááºá
áá»á±á¬ááºážá¡áá»áá¯ážá¡á á¬ážáá»á¬áž
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)
);
á¡á±á¬áºááá±áá¬áá»á¬ážááẠstream áá»á¬ážááŸáá·áºá¡áá°á¡áá¯ááºáá¯ááºááá¯ááºá áœááºážááá¯áá»á²á·ááœááºáááºáá»áœááºá¯ááºááá¯á·á¡á¬ážáá±ážá áœááºážááá¯ááºáááºá áá°ááá¯á·ááẠObservable ááœááºááŒá áºáá»ááºáá±áá±á¬á¡ááŒá áºá¡áá»ááºáá»á¬ážááá¯ááááºážáá»á¯ááºáá°áá®áá±ážáááºá áá»áœááºá¯ááºááá¯á·ááẠáá°ááŒáá¯ááºá¡áá»á¬ážáá¯á¶áž ááŸá áºáá¯ááᯠááŒáá·áºááŸá¯áááºááŒá áºááŒá®áž á¡áá¯á¶ážáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááœáẠááá·áºááºáá»á¬ážááᯠááá¯ááºáá¬ááŒááºážááŒáá·áº á¡á±á¬áºááá±áá¬áá»á¬ážá¡ááŒá±á¬ááºáž ááá¯ááá¯ááááŸáááá¯ááºáááºááŒá áºáááºá
áá¯ááºáááºážááŸááºáá»á¬áž - á
á¡áááºá¡á±á¬áºááá±áá¬ááŒáá·áº á áááºááŒáá«á áá¯á·á áááºážááẠááá¯ážááŸááºážáá±á¬áááºááá¯ážááᯠá¡ááŒá±áá¶á Observable áá áºáá¯ááᯠáááºáá®ážáááºá
á¡á±á¬áºááá±áᬠ- ááá¬
á¡áááºá¡ááŒá¶ááŒá¯áá¬ážááá·áºá¡ááá¯ááºáž á á áºáá¯ááºááá·áºá¡á±á¬áºááá±áá¬ááẠáá¯ááºááœáŸáá·áºááŸá¯á¡áá»ááºááŒááŸá¯ááᯠá á áºáá¯ááºáááºá á¡á±á¬áºááá±áá¬á០á¡ááŸááºááŒááºáááºáá¬áá«á áááºážááẠáá±á¬ááºáááºáá»á±á¬áºááœá¬ážáááºááŒá áºáááºá
áá¯ááºáááºážááŸááºáá»á¬áž - áá°áá«á
áá°ááẠ- áá»ááºáá»áŸááºá¡áá¯á¶ážáááºááŒá®ážáá±á¬áẠáá¯ááºááœáŸááºááá·áºá¡áá±á¡ááœááºááááºááá¯ážááᯠáá°áááºá
á¡á±á¬áºááá±áá¬áá»á¬áž - 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 false ááŒááºááá¬ááá»ááºáž áááºááá¯ážáá»á¬ážááᯠáá¯ááºááœáŸááºáááºá ááá¯á·áá±á¬ááºááœáẠáááºážááẠthread á០á á¬áááºážááœááºážááŸá¯á០ááŒá¯ááºááá¯ááºáá«áááºá
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 )
);
á¡á±á¬áºááá±áá¬áá»á¬áž - áá±á«ááºážá ááºáá±á¬ááºáá¯á¶ážáá±á«áº
áá±á«ááºážá ááºáá±á¬ááºáá¯á¶ážáá±á«áºá¡á±á¬áºááá±áá¬ááẠpromise.all ááŸáá·áº á¡áááºážáááºáááºáá°áááºá áááºážááẠthread á¡áá»á¬ážá¡ááŒá¬ážááᯠáá áºáá¯áááºážá¡ááŒá Ạáá±á«ááºážá ááºáá¬ážáááºá thread áá áºáá¯á á®ááẠá¡áááºážáá¯á¶áž emission áá áºáá¯ááŒá¯áá¯ááºááŒá®ážáá±á¬ááºá array áá¯á¶á á¶áá áºáá¯á á®á០áá áºáá¯á á®á០áá±á¬ááºáá¯á¶ážáááºááá¯ážáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· áááŸááá«áááºá ááá¯á·á¡ááŒááºá áá±á«ááºážá ááºážáá¬ážáá±á¬ á ááºážáá»á±á¬ááºážáá»á¬ážá០áá¯ááºááœáŸááºááŸá¯ áá áºáá¯áá¯ááŒá®ážáá±á¬ááºá áááºážááẠáááºááá¯ážá¡áá áºáá»á¬ážááᯠáá±ážáááá·áºáááºá
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));
á¡á±á¬áºááá±áᬠ- áá áº
áá Ạ- á á¬ááœá²áá áºáá¯á á®á០áááºááá¯ážáá áºáá¯ááᯠá á±á¬áá·áºááŒá®áž á€áááºááá¯ážáá»á¬ážáá±á«áºá¡ááŒá±áá¶á á¡áááºážá¡áá»ááºážáá áºáá¯ááᯠáááºáá®ážáá«á á¡áááºá áááºááá¯ážááẠáááºááá·áºá¡ááŒá±á¬ááºážá¡áá¬á០ááá¬áá«áá á¡ááœá²á·ááᯠááœá²á·á ááºážáááºááá¯ááºáá«á
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 ááẠthreads áá»á¬ážááŸáá·áºáááºáž áá»áááºáááºáá¬ážáá±á¬áºáááºáž thread áá»á¬ážá¡á¬ážáá¯á¶ážááŒá®ážáá±á¬á¡áá«ááŸáᬠáááºááá¯ážáá áºáᯠáá¯ááºááœáŸááºáá«áááºá
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);
á¡á±á¬áºááá±áᬠ- ááŒá±áá¯á¶
ááŒá±áá¯á¶á¡ááœááºááŒá±á¬ááºážááá·áº á¡á±á¬áºááá±áá¬ááẠáá¯ááºááœáŸááºááá·áºáááºááá¯ážááᯠá¡áá áºáá áºáá¯á¡ááŒá ẠááŒá±á¬ááºážáá²áááºá
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)
);
á¡á±á¬áºááá±áá¬áá»á¬áž - áá»áŸáá±áá«á ááŸáááºáá«á
á¡áá¬áá¯ááºá¡á±á¬áºááá±áá¬ááẠááá·áºá¡á¬áž áá±ážááœááºááá¯ážáá»áá¯ážáá»á¬ážááŒá¯áá¯ááºááá¯ááºá á±áááºá ááá¯ááá¯áááºááŸá¬ á¡á á®á¡á á¥áºááá¯áááááá¯ááºá á±áá±á¬ áááºááá·áºáá¯ááºáá±á¬ááºáá»ááºáááᯠááŒá¯áá¯ááºááá¯ááºá á±áá«áááºá
áá»áŸáá±áá¯á¶ážá áœá²ááŸá¯á¡á±á¬áºááá±áá¬ááẠá¡á±ážáá±á¬á ááºážáá»á±á¬ááºážááᯠáá°ááŒááºážááá·áºá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááá¯ááºáááºá
á¡á±á¬áºááá±áá¬ááœá±áá²á· ááŒá®ážááœá¬ážáá«ááŒá®á Subject ááᯠáááºááœá¬ážáá¡á±á¬ááºá
á¡áá»ááºááŒá®ážááœá±ážááá¯ááºáááááºá
ááŒá®ážáá±á¬á· áááºáááºáááºáá±á¬ááºááá¯á· ááœá¬ážááá¯ááºáááºá áá®á¥ááá¬ááœá±ááᯠááŒá®ážááœá±á·áá¬áááºá
áá¬ááá¶ááŸáẠáááá¬ážá á¯
áá¬áá¬áááºáááá¬ážá á¯ááẠhot flow áá¡áááá¥ááá¬áá áºáá¯ááŒá áºáááºá á€á¡áááºážáá»á¬ážááẠáá±á·áá¬áá°ááŸáá·áº á á±á¬áá·áºááŒáá·áºáá°á¡ááŒá ẠáááŒáá¯ááºááẠáá¯ááºáá±á¬ááºááá·áº áá±á«ááºážá ááºáá áºáá»áá¯ážááŒá áºáááºá Subject ááẠhot thread áá áºáá¯ááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááᯠá á¬áááºážááœááºážááŸá¯á០áááºáá»ááºááẠááá¯á¡ááºáá«áááºá á¡ááááááºážáááºážááœá±á¡ááŒá±á¬ááºážááŒá±á¬áááºá
- áá±á¬ááºáá áºáᯠ- áá±áá¬á¡áá áºááᯠááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá«á
- á¡ááŸá¬áž- á¡ááŸá¬ážááŸáá·áº ááŒáá¯ážááŒááºáá±á¬ááºááŸá¯
- ááŒá®ážááŒá±á¬ááºááẠ- ááŒáá¯ážáááŒá®ážá á®ážááŸá¯
- á á¬áááºážááœááºážáá« - áá¯ááºááœáŸáá·áºááŸá¯ááᯠá á¬áááºážááœááºážáá«á
- á á¬áááºážááœááºážááŸá¯ááŒá¯ááºáá« - áá¯ááºááœáŸáá·áºááŸá¯á០á á¬áááºážááœááºážááŸá¯ááᯠáááºááá¯ááºážáá«á
- asObservable â áá±á·áá¬áá°á¡ááŒá ẠááŒá±á¬ááºážáá²áá«á
- to Promise â ááááá áºáá¯á¡ááŒá ẠááŒá±á¬ááºážáá²áááºá
áá¬áá¬ááẠ4 5 áá»áá¯ážááŸááá«áááºá
á¡áá»ááºááŒá®ážááœá±ážááá¯ááºáááááºá
á ááºážáá»á±á¬ááºážááœáẠáá° 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 á¡áá¯ááºáá¯ááºáá¯á¶- á¡ááºáá»ááºáááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºá runtime ááá¹ááá¬ážáá»á¬ážá áá±á«áºááá¯ááŸá¯á¡á ᯠJS á¡áá¯ááºáá¯ááºáá¯á¶- Event Loopá Asynchrony ááŸáá·áº async/ait ááŒáá·áº ááá·áºáá¯ááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºááẠáááºážáááºážáá«ážáᯠJavaSript ááœáẠEvent Loop á¡áá¯ááºáá¯ááºáá¯á¶ Asynchronous JavaScript áááá·áºáá²ááŒá áºá áẠRxJS ááá¯áᬠáá¬áá²á á¡á²áá«ááᯠááááá¯á· áá¬ááŒá±á¬áá·áº á¡áá¯á¶ážáááºáá¬áá²á
RxJS ááááºááœá±á·á¡áá¯á¶ážáá»ááŸá¯ RxJS Observables áá»á°ááá¯áá®ááẠâ Observables ááᯠáááºáá®ážááŒááºážááŸáá·áº á á¬áááºážááœááºážááŒááºážá RXJS- á¡áá°ááŸáá·áºá¡á¡á±áž ááŸá¯ááŒááºááá¯ááºáá±á¬ á¡áá¬áá»á¬áž Observable áááºáá®ážáááºá¡ááœáẠá¡áááºážáá»á¬ážá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áá¯ááºáááºážááŸááºáá»á¬ážá á¥ááá¬á¡á¬ážááŒáá·áº RxJS á¡á±á¬áºááá±áá¬áá»á¬áž API á á¬áááºáž RxJS ááŸá áá¬áá¬áááºááŸáá·áº á¡áá»áááºááá¬ážáá»á¬áž á¡áá»áá¯ážá¡á á¬ážáá»á¬áž
source: www.habr.com