เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™. Sergey Omelnitsky เบเปเบฒเบฅเบฑเบ‡เบ•เบดเบ”เบ•เปเปˆ. เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก reactive, เบšเปˆเบญเบ™เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš asynchrony เปƒเบ™ JavaScript. เบกเบทเป‰เบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเป€เบญเบปเบฒเบšเบฑเบ™เบ—เบถเบเบเปˆเบฝเบงเบเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เปเบ•เปˆเบเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบญเบธเบ›เบฐเบเบญเบ™เบ•เบปเป‰เบ™เบ•เป, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบšเบปเบ”เปเบ™เบฐเบ™เปเบฒ. เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ„เปเบฒเบ™เบดเบเบฒเบก: stack เปเบฅเบฐเปเบ–เบงเปเบกเปˆเบ™เบซเบเบฑเบ‡?

stack เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบเบณเบ—เบตเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบกเปˆเบ™เป„เบ”เป‰เบกเบฒเบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™ LIFO เบชเบธเบ”เบ—เป‰เบฒเบ, เบญเบญเบเบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”

เบ„เบดเบง เปเบกเปˆเบ™เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ—เบตเปˆเบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™ FIFO เบ—เปเบฒเบญเบดเบ”เป€เบ‚เบปเป‰เบฒ, เบญเบญเบเบ—เปเบฒเบญเบดเบ”

เบ•เบปเบเบฅเบปเบ‡, เปƒเบซเป‰เบชเบทเบšเบ•เปเปˆ.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

JavaScript เปเบกเปˆเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเบกเบตเบเบฐเบ—เบนเป‰เบ”เบฝเบง. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบเบฐเบ—เบนเป‰เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบซเบ™เบถเปˆเบ‡ stack เบเปˆเบฝเบงเบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเบˆเบฑเบ”เบ„เบดเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, JavaScript เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบ„เบฑเป‰เบ‡, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบญเบทเปˆเบ™เป†เบˆเบฐเบฅเปเบ–เป‰เบฒเบเบฒเบ™เป€เบ›เบตเบ” stack เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบˆเบปเบ™เบเปˆเบงเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเป€เบญเบตเป‰เบ™.

เป‚เบ—เบซเบฒ stack เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆ, เป€เบงเบปเป‰เบฒเบ‡เปˆเบฒเบเป†, เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆ. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบœเปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบžเบงเบเป€เบฎเบปเบฒเบเบนเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบ‚เบญเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ stack. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบ—เบดเบ‡เบชเบธเบ”เบˆเบฒเบ stack เปเบฅเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบŸเบฑเบ‡เบŠเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆ stack เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰. เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบ›เบฑเบ™เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบธเบ”. เปเบฅเป‰เบง asynchrony เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”เปƒเบ™ JavasScript?

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบ stack, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบกเบตเปเบ–เบงเบžเบดเป€เบชเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ WebAPI. เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™เปเบ–เบงเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบ stack เป„เบ”เป‰เบ–เบทเบเบฅเบถเบšเบฅเป‰เบฒเบ‡เบซเบกเบปเบ”. เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบ pushed เบˆเบฒเบเปเบ–เบงเปƒเบชเปˆ stack เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ–เป‰เบฒเบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบขเบนเปˆเปƒเบ™ stack เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆ stack เป„เบ”เป‰. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบตเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเป‚เบ—เบซเบฒเป€เบงเบฅเบฒเบซเบกเบปเบ”เป€เบงเบฅเบฒเบกเบฑเบเบˆเบฐเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เป€เบงเบฅเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒเบŸเบฑเบ‡เบŠเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเปเบ–เบงเป„เบ›เบซเบฒ stack เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เป€เบ•เบฑเบก.

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป‚เบ”เบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบฅเบฐเบšเบปเบš.

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

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

1) เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบ—เบทเปˆเบญ. เบ„เบญเบ™เป‚เบŠเบ‚เบญเบ‡เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเปเบกเปˆเบ™เบˆเบฐเปเบˆเป‰เบ‡, stack เบเบฒเบ™เป‚เบ—เปเบกเปˆเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

2) เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เปเบฒเบชเบฑเปˆเบ‡ console.log('Hi') เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

3) เปเบฅเบฐเบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบฅเบธเบœเบปเบ™

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

4) เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, console.log('Hi') เป„เบ”เป‰เบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

5) เบ•เบญเบ™เบ™เบตเป‰เบเป‰เบฒเบเป„เบ›เบ—เบตเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡ setTimeout(function cb1() {โ€ฆ }). เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

6) เบ„เปเบฒเบชเบฑเปˆเบ‡ setTimeout(function cb1() {โ€ฆ }) เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบšเป€เบงเบฅเบฒเป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ Web API. เบกเบฑเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ™เบฑเบšเบ–เบญเบเบซเบผเบฑเบ‡.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

7) เบ„เปเบฒเบชเบฑเปˆเบ‡ setTimeout(function cb1() {... }) เป„เบ”เป‰เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

8) เบ„เปเบฒเบชเบฑเปˆเบ‡ console.log('Bye') เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

9) เบ„เปเบฒเบชเบฑเปˆเบ‡ console.log('Bye') เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

10) เบ„เปเบฒเบชเบฑเปˆเบ‡ console.log('Bye') เบ–เบทเบเบฅเบถเบšเบญเบญเบเบˆเบฒเบ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

11) เบซเบผเบฑเบ‡เบˆเบฒเบเบขเปˆเบฒเบ‡เปœเป‰เบญเบ 5000 ms เบœเปˆเบฒเบ™เป„เบ›เปเบฅเป‰เบง, เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบšเป€เบงเบฅเบฒเบˆเบฐเบขเบธเบ”เบฅเบปเบ‡ เปเบฅเบฐเบงเบฒเบ‡ callback cb1 เปƒเบ™เปเบ–เบง callback.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

12) เป€เบซเบ”เบเบฒเบ™ loop เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ cb1 เบˆเบฒเบเบ„เบดเบงเป‚เบ—เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบงเบฒเบ‡เบกเบฑเบ™เป„เบงเป‰เปƒเบ™ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

13) เบŸเบฑเบ‡เบŠเบฑเบ™ cb1 เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ” เปเบฅเบฐเป€เบžเบตเปˆเบก console.log('cb1') เปƒเบชเปˆเบŠเบธเบ”เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

14) เบ„เปเบฒเบชเบฑเปˆเบ‡ console.log('cb1') เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

15) เบ„เปเบฒเบชเบฑเปˆเบ‡ console.log('cb1') เบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบ stack เบเบฒเบ™เป‚เบ—.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

16) เบŸเบฑเบ‡เบŠเบฑเบ™ cb1 เบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบ stack เบเบฒเบ™เป‚เบ—.

เบ‚เปโ€‹เปƒเบซเป‰โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เป„เบซเบงโ€‹:

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™ asynchrony เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ JavaScript. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” asynchronous.

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” asynchronous.

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);
                    })
                })
            })
        })
    })
});

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เปƒเบ™ JavaScript เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบ„เบทเบเบฑเบšเบ•เบปเบงเปเบ›เบญเบทเปˆเบ™เป†เบ•เปเปˆเบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบญเบทเปˆเบ™เป†. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆ callbacks เป€เบเบตเบ”เบกเบฒ. เปเบฅเบฐเบกเบฑเบ™เป€เบขเบฑเบ™, เบกเปˆเบงเบ™เปเบฅเบฐเบซเบผเบดเป‰เบ™, เบˆเบปเบ™เบเปˆเบงเบฒเบกเบฑเบ™เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป‚เบชเบเป€เบชเบปเป‰เบฒ, melancholy เปเบฅเบฐเบ„เบงเบฒเบกเป‚เบชเบเป€เบชเบปเป‰เบฒ. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ:

  • เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™, เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ›เบดเบ”เบšเบฑเบ‡, เบŠเป‰เปเบฒเบŠเป‰เบญเบ™ - "callback hell".
  • เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบชเบฒเบกเบฒเบ”เบžเบฒเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบ.
  • เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเบปเปˆเบ‡โ€‹เบ„เบทเบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹.

เบ”เป‰เบงเบเบเบฒเบ™เบกเบฒเป€เบ–เบดเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบ™เบเบฒ, เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป„เบ”เป‰เบ”เบตเบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ.

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
  • เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚ asynchrony nested เป‚เบ”เบเปƒเบŠเป‰ async/await

เปเบ•เปˆเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ„เปเบฒเบชเบฑเบ™เบเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบเบปเบเป€เบฅเบตเบเป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ•เบฑเป‰เบ™เบฅเปเบฒเบเบฑเบš tambourine, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบนเบ™เบ„เปˆเบฒเบซเบ™เบถเปˆเบ‡.

เบ”เบต, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเบซเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก reactive เบขเปˆเบฒเบ‡เบฅเบฝเบšเบ‡เปˆเบฒเบ. เป€เบกเบทเปˆเบญเบ? เบ”เบต, เป‚เบŠเบเบ”เบต, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบŠเบฒเบšเบฒเบ‡, เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เปเบฅเบฐเบเบฑเบšเบกเบฒเบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เปเบฅเบฐเบ‚เป‰เบญเบเบˆเบฐเบชเบทเบšเบ•เปเปˆ.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เป‚เบ›เบฃเปเบเบก Reactiveโ€Šเป€เบ›เบฑเบ™เบ‚เบฐเบšเบงเบ™เบงเบดเบงเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เป„เบซเบฅเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบžเบฑเบ™. เบฅเบญเบ‡เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฐเปเบชเบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡.

// ะŸะพะปัƒั‡ะฐะตะผ ััั‹ะปะบัƒ ะฝะฐ ัะปะตะผะตะฝั‚
const input = ducument.querySelector('input');

const eventsArray = [];

// ะŸัƒัˆะธะผ ะบะฐะถะดะพะต ัะพะฑั‹ั‚ะธะต ะฒ ะผะฐััะธะฒ eventsArray
input.addEventListener('keyup',
    event => eventsArray.push(event)
);

เปƒเบซเป‰เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบŠเปˆเบญเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ array เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป† keyup เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™ input เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป€เบซเบ”เบเบฒเบ™เปƒเบ™ array เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ array เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเป€เบงเบฅเบฒ, i.e. เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™เบ•เปเปˆเบกเบฒเปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒเบ”เบฑเบ”เบŠเบฐเบ™เบตเบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒ. array เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เบ•เบปเบงเปเบšเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป„เบซเบฅเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบ›เบฑเบ™เบเบฐเปเบช. เป€เบžเบทเปˆเบญเปƒเบซเป‰ array เบ™เบตเป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบž, เบกเบฑเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เปเบˆเป‰เบ‡เปƒเบซเป‰เบœเบนเป‰เบˆเบญเบ‡เป„เบ”เป‰เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆเบกเบฒเบฎเบญเบ”เบกเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡เบเบฒเบ™เป„เบซเบผ.

เบเบฐเปเบชเบ‚เปเป‰เบกเบนเบ™

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

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

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบเบฐเปเบชโ€Šเปเบกเปˆเบ™ array เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ•เบญเบ™เบ™เบตเป‰เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบกเบฑเบ™เบชเบฐเบ”เบงเบเบ›เบฒเบ™เปƒเบ”เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เบถเปˆเบ‡เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบผเบฒเบเป†เป€เบซเบ”เบเบฒเบ™เปƒเบ™เบชเปˆเบงเบ™เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบฐเปเบฑเบเปƒเบŠเป‰เบเบฐเปเบช เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” RxJs เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

RxJS เป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบชเบณเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป‚เบ›เบฃเปเบเบฃเบกเบ—เบตเปˆเบšเปเปˆเบŠเบดเป‰เบ‡เป‚เบ„เบ™ เปเบฅเบฐ เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเบฅเบณเบ”เบฑเบšเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป„เบ”เป‰. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฐเบซเบ™เบญเบ‡เบ›เบฐเป€เบžเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™ เบชเบฑเบ‡เป€เบเบ”เป„เบ”เป‰, เบซเบผเบฒเบโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบเบฒเบ™โ€‹เบŠเปˆเบงเบโ€‹เป€เบซเบผเบทเบญ (เบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™, เบœเบนเป‰เบˆเบฑเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบงเบดเบŠเบฒ) เปเบฅเบฐโ€‹เบœเบนเป‰โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบšโ€‹เป€เบซเบ”โ€‹เบเบฒเบ™โ€‹เป€เบŠเบฑเปˆเบ™โ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒ (เปเบœเบ™เบ—เบตเปˆ, เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เบซเบผเบธเบ”เบœเปˆเบญเบ™, เบ—เบธเบ เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบˆเบฒเบ JavaScript Array).

เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ™เบตเป‰.

เบชเบฑเบ‡เป€เบเบ”เป„เบ”เป‰, เบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™, เบœเบนเป‰เบœเบฐเบฅเบดเบ”

Observable เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡. เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ™เบตเป‰เบกเบตเบชเปˆเบงเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” RxJs. เบกเบฑเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบเบฐเปเบชเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบฑเบ‡เป€เบเบ”เป„เบ”เป‰, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบˆเบญเบ‡เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบˆเบญเบ‡.

Observable เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ™เป„เบเบœเบนเป‰เบŠเปˆเบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡, เบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™. เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบ„เบธเบ™เบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™เปเบกเปˆเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบœเบนเป‰เบœเบฐเบฅเบดเบ”. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™ array, iterator, web socket, เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบงเปˆเบฒ observable เปเบกเปˆเบ™ conductor เบฅเบฐเบซเบงเปˆเบฒเบ‡เบœเบนเป‰เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™.

Observable เบˆเบฑเบ”เบเบฒเบ™เบชเบฒเบกเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™ Observer:

  • เบ•เปเปˆเป„เบ› - เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ
  • error โ€“ เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบฅเปเบฒเบ”เบฑเบšเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบเบปเบเป€เบงเบฑเป‰เบ™. เป€เบซเบ”เบเบฒเบ™เบ™เบตเป‰เบเบฑเบ‡เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบฅเปเบฒเบ”เบฑเบš.
  • เบชเบปเบกเบšเบนเบ™ โ€” เบชเบฑเบ™เบเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบฅเปเบฒเบ”เบฑเบš. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบˆเบฐเบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆเบญเบตเบ.

เบกเบฒเป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡:

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เปˆเบฒ 1, 2, 3, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบ 1 เบงเบดเบ™เบฒเบ—เบต. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš 4 เปเบฅเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบ„เบดเบ”เบญเบญเบเบชเบฝเบ‡เบ”เบฑเบ‡

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเบเบฒเบ™เบšเบญเบเบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบเปˆเบงเบฒเบเบฒเบ™เบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™. ๐Ÿ˜€

เบเบฒเบ™เบชเบฐเบซเบกเบฑเบ

เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบŠเบฑเป‰เบ™เบฎเบฝเบ™เปƒเบซเบกเปˆ เบเบฒเบ™เบˆเบญเบ‡เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบˆเบญเบ‡เป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™ unsubscribe. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบธเปˆเบกเบเบฒเบ™เบˆเบญเบ‡เป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™ เป€เบžเบตเปˆเบก. เบ”เบต, เบกเบฑเบ™เบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปเบเบเบเบธเปˆเบกเบซเบปเบงเบ‚เปเป‰เป‚เบ”เบเปƒเบŠเป‰ เป€เบญเบปเบฒ. เบงเบดเบ—เบตเบเบฒเบ™เป€เบžเบตเปˆเบก เปเบฅเบฐเบฅเบถเบšเป€เบญเบปเบฒเบเบฒเบ™เบชเบฐเปเบฑเบเบชเบฐเบกเบฒเบŠเบดเบเบญเบทเปˆเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบˆเบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ„เบทเบเบฑเบšเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบˆเบญเบ‡. เบชเบทเบšเบ•เปเปˆเป€เบ”เบตเบ™เบซเบ™เป‰เบฒ.

เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบชเบฒเบเบ™เป‰เปเบฒ

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 เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เบ•เบฒเบกเบŠเบทเปˆเปเบ™เบฐเบ™เปเบฒ, เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบชเบฑเบ™เบเบฒเบ™เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”. เบ–เป‰เบฒเบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡, เบกเบฑเบ™เบˆเบฐเบ‚เป‰เบฒเบกเป„เบ›เบ•เบทเปˆเบกเบญเบตเบ.

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - เป€เบญเบปเบฒ

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เป€เบญเบปเบฒ - เป€เบญเบปเบฒเบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ emitters, เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆ thread เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡.

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - debounceTime

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

debounceTime - เบเบปเบเป€เบฅเบตเบเบ„เปˆเบฒ emitted เบ—เบตเปˆเบ•เบปเบเบขเบนเปˆเบžเบฒเบเปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš - เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบฅเบเบฐเป€เบงเบฅเบฒเป„เบ”เป‰เบœเปˆเบฒเบ™เป„เบ›, emits เบ„เปˆเบฒเบชเบธเบ”เบ—เป‰เบฒเบ.

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)
);  

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - takeWhile

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบ›เปˆเบญเบเบ„เปˆเบฒเบˆเบปเบ™เบเปˆเบงเบฒ takeWhile เบเบฑเบšเบ„เบทเบ™ false, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™ unsubscribes เบˆเบฒเบ 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 )
);  

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบซเบผเป‰เบฒเบชเบธเบ”

เป‚เบ•เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ mixLatest เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš promise.all. เบกเบฑเบ™เบฅเบงเบกเบซเบผเบฒเบเบซเบปเบงเบ‚เปเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เบถเปˆเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบเบฐเบ—เบนเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบญเบฒเบเบžเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบซเบฅเป‰เบฒเบชเบธเบ”เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบญเบฒเป€เบฅ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบญเบเบญเบฒเบเบžเบดเบ”เปƒเบ”เป†เบˆเบฒเบเบชเบฒเบเบ™เป‰เปเบฒเบ—เบตเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™, เบกเบฑเบ™เบˆเบฐเปƒเบซเป‰เบ„เบธเบ™เบ„เปˆเบฒเปƒเบซเบกเปˆ.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ 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));

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - zip

Zip - เบฅเปเบ–เป‰เบฒเบ„เปˆเบฒเบˆเบฒเบเปเบ•เปˆเบฅเบฐ thread เปเบฅเบฐเบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™ array เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบ–เป‰เบฒเบ„เปˆเบฒเบšเปเปˆเป„เบ”เป‰เบกเบฒเบˆเบฒเบเบเบฐเบ—เบนเป‰เปƒเบ”เป†, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบธเปˆเบกเบˆเบฐเบšเปเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ 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));

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ - forkJoin

forkJoin เบเบฑเบ‡เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบเบฐเบ—เบนเป‰, เปเบ•เปˆเบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เปˆเบญเบเบ„เปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฐเบ—เบนเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเป€เบฅเบฑเบ”.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ 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);

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ - เปเบœเบ™เบ—เบตเปˆ

เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เบ„เปˆเบฒ emitter เปƒเบซเป‰เป€เบ›เบฑเบ™เบญเบฑเบ™เปƒเปเปˆ.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ 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)
);

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ โ€“ เปเบšเปˆเบ‡เบ›เบฑเบ™, เปเบ•เบฐ

เบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฒเบ”เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ”เป†เบ—เบตเปˆเบšเปเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบฅเปเบฒเบ”เบฑเบš.

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบชเบฒเบเบ™เป‰เปเบฒเป€เบขเบฑเบ™เป€เบ›เบฑเบ™เบ™เป‰เปเบฒเบฎเป‰เบญเบ™.

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Asynchronous เปƒเบ™ JavaScript (Callback, Promise, RxJs)

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบฅเป‰เบงเบเบฑเบšเบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™. เปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบซเบปเบงเบ‚เปเป‰.

เบ„เบดเบ”เบญเบญเบเบชเบฝเบ‡เบ”เบฑเบ‡

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบเปเปˆเป„เบ›เบ”เบทเปˆเบกเบŠเบฒ. เบ‚เป‰เบญเบเป€เบกเบทเปˆเบญเบเบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰๐Ÿ˜€

เบ„เบญเบšเบ„เบปเบงเบงเบดเบŠเบฒ

เบ„เบญเบšโ€‹เบ„เบปเบงโ€‹เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบเบฐโ€‹เปเบชโ€‹เบฎเป‰เบญเบ™โ€‹. เบซเป‰เบญเบ‡เบฎเบฝเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเป‰เบญเบกเป†เบเบฑเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เปเบฅเบฐเบœเบนเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบซเบปเบงเบ‚เปเป‰เป€เบ›เบฑเบ™เบซเบปเบงเบ‚เปเป‰เบฎเป‰เบญเบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบˆเบญเบ‡เบกเบฑเบ™. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ•เบปเป‰เบ™เบ•เป, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™:

  • เบ•เปเปˆเป„เบ› โ€“ เบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเปเปˆเปƒเบชเปˆเบเบฐเปเบช
  • error โ€“ เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ›เบดเบ”โ€‹เบเบฐโ€‹เบ—เบนเป‰โ€‹
  • เบชเปเบฒเป€เบฅเบฑเบ” - เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบเบฐเบ—เบนเป‰
  • เบˆเบญเบ‡ - เบชเบฐโ€‹เปเบฑเบโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบตเบกโ€‹
  • unsubscribe โ€“ เบเบปเบโ€‹เป€เบฅเบตเบโ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบตเบกโ€‹
  • asObservable โ€“ เบ›เปˆเบฝเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบœเบนเป‰โ€‹เบชเบฑเบ‡โ€‹เป€เบเบ”โ€‹เบเบฒเบ™โ€‹
  • to Promise โ€“ เบ›เปˆเบฝเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹

เบกเบต 4 5 เบ›เบฐเป€เบžเบ”เบงเบดเบŠเบฒ.

เบ„เบดเบ”เบญเบญเบเบชเบฝเบ‡เบ”เบฑเบ‡

เบกเบตเบ„เบปเบ™เป€เบงเบปเป‰เบฒเบขเบนเปˆ 4 เบ„เบปเบ™เปƒเบ™เบเบฐเปเบช, เปเบ•เปˆเบ›เบฐเบเบปเบ”เบงเปˆเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเบญเบตเบเปœเบถเปˆเบ‡เบ„เบปเบ™. เบเป‰เบญเบ™เบงเปˆเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”เปเบฅเบฐเบฎเบฝเบ™เบฎเบนเป‰.

เบงเบดเบŠเบฒเบ‡เปˆเบฒเบเบ”เบฒเบ new Subject()- เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ‚เบญเบ‡โ€‹เบงเบดโ€‹เบŠเบฒโ€‹เบ—เบตเปˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹. เบชเป‰เบฒเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต. เบชเบปเปˆเบ‡เบ„เปˆเบฒเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบฐเบซเบกเบฑเบ.

เบžเบถเบ”เบ•เบดเบเปเบฒ new BehaviorSubject( defaultData<T> ) - เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ›เบฐเป€เบžเบ”เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰. เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบญเบปเบฒเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบชเบฐเป€เบซเบกเบตเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เบ•เปเปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเบซเบกเบฑเบ. เบŠเบฑเป‰เบ™เบฎเบฝเบ™เบ™เบตเป‰เบเบฑเบ‡เบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เป€เบŠเบดเปˆเบ‡เบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบเบฐเปเบช.

ReplaySubject new ReplaySubject(bufferSize?: number, windowTime?: number) โ€” เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเป„เบ”เป‰เบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ buffer เบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡, เปเบฅเบฐเป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡.

AsyncSubject new AsyncSubject() โ€” เบšเปเปˆโ€‹เบกเบตโ€‹เบซเบเบฑเบ‡โ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹, เปเบฅเบฐโ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เบกเบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป€เบกเบทเปˆเบญโ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹. เบžเบฝเบ‡เปเบ•เปˆเบ„เปˆเบฒเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฐเปเบชเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™.

WebSocketSubject new WebSocketSubject(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>) โ€” เป€เบญเบเบฐเบชเบฒเบ™เปเบกเปˆเบ™เบกเบดเบ”เบ‡เบฝเบšเบเปˆเบฝเบงเบเบฑเบšเบฅเบฒเบง เปเบฅเบฐเบ‚เป‰เบญเบเป€เบซเบฑเบ™เบฅเบฒเบงเป€เบ›เบฑเบ™เป€เบ—เบทเปˆเบญเบ—เบณเบญเบดเบ”. เบ–เป‰เบฒเปƒเบœเบฎเบนเป‰เบงเปˆเบฒเบฅเบฒเบงเป€เบฎเบฑเบ”เบซเบเบฑเบ‡, เบเบฐเบฅเบธเบ™เบฒเบ‚เบฝเบ™เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบกเบฑเบ™.

เบŸเบตเบง. เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบงเบกเป€เบญเบปเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบญเบเป€เบˆเบปเป‰เบฒเปƒเบ™เบกเบทเป‰เบ™เบตเป‰. เบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เปƒเบ™เปเบ–เบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”.

เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบเบ”

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™