Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Bawo ni gbogbo eniyan. Sergey Omelnitsky wa ni ifọwọkan. Laipẹ sẹhin Mo gbalejo ṣiṣan kan lori siseto ifaseyin, nibiti Mo ti sọrọ nipa asynchrony ni JavaScript. Loni Emi yoo fẹ lati ṣe akọsilẹ lori ohun elo yii.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Ṣugbọn ṣaaju ki a to bẹrẹ ohun elo akọkọ, a nilo lati ṣe akọsilẹ ifọrọwerọ. Nitorinaa jẹ ki a bẹrẹ pẹlu awọn asọye: kini akopọ ati isinyi?

Akopọ ni a gbigba ti awọn eroja ti wa ni gba lori kan ti o kẹhin-ni, akọkọ-jade LIFO igba

Ipele ni a gbigba ti awọn eroja ti wa ni gba lori kan akọkọ-ni, akọkọ-jade FIFO ipilẹ

O dara, jẹ ki a tẹsiwaju.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

JavaScript jẹ ede siseto-asapo kan. Eyi tumọ si pe o tẹle ara ipaniyan kan ṣoṣo ati akopọ kan lori eyiti awọn iṣẹ ti wa ni isinyi fun ipaniyan. Nitorinaa, JavaScript le ṣe iṣẹ kan ṣoṣo ni akoko kan, lakoko ti awọn iṣẹ miiran yoo duro titan wọn lori akopọ titi ti wọn yoo fi pe wọn.

Ipe akopọ jẹ ipilẹ data ti, ni irọrun fi sii, ṣe igbasilẹ alaye nipa aaye ninu eto nibiti a wa. Ti a ba kọja sinu iṣẹ kan, a tẹ titẹsi rẹ si oke ti akopọ naa. Nigba ti a ba pada lati iṣẹ kan, a agbejade awọn topmost ano lati akopọ ati ki o mu soke pada ibi ti a ti a npe ni iṣẹ. Eyi ni gbogbo ohun ti akopọ le ṣe. Ati nisisiyi ibeere ti o nifẹ pupọ. Bawo lẹhinna asynchrony ṣiṣẹ ni JavasScript?

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Ni otitọ, ni afikun si akopọ, awọn aṣawakiri ni isinyi pataki fun ṣiṣẹ pẹlu eyiti a pe ni WebAPI. Awọn iṣẹ ti o wa ni isinyi yii yoo ṣiṣẹ ni aṣẹ nikan lẹhin akopọ ti a ti sọ di mimọ patapata. Lẹhin eyi nikan ni wọn ti tẹ lati ori isinyi sori akopọ fun ipaniyan. Ti nkan kan ba wa lori akopọ ni akoko, lẹhinna wọn ko le ṣafikun wọn si akopọ. O jẹ gbọgán nitori eyi pe awọn iṣẹ pipe nipasẹ akoko isinmi nigbagbogbo kii ṣe deede ni akoko, nitori pe iṣẹ naa ko le gba lati isinyi si akopọ lakoko ti o kun.

Jẹ ki a wo apẹẹrẹ atẹle ki o bẹrẹ pẹlu ipaniyan igbese-nipasẹ-igbesẹ. Jẹ ki a tun wo ohun ti o ṣẹlẹ ninu eto naa.

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

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

1) Ko si ohun ti o ṣẹlẹ sibẹsibẹ. console ẹrọ aṣawakiri jẹ kedere, akopọ ipe ti ṣofo.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

2) Lẹhinna console aṣẹ.log ('Hi') ti wa ni afikun si akopọ ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

3) Ati pe o ti ṣẹ

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

4) Lẹhinna console.log ('Hi') yọkuro lati akopọ ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

5) Bayi tẹsiwaju si aṣẹ setTimeout (iṣẹ cb1 () {…}). O ti wa ni afikun si akopọ ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

6) Ilana setTimeout (iṣẹ cb1 () {…}) ti ṣiṣẹ. Aṣàwákiri naa ṣẹda aago kan ti o jẹ apakan API Wẹẹbu. O yoo ṣe kika kan.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

7) Aṣẹ setTimeout (iṣẹ cb1 () {...}) ti pari iṣẹ rẹ ati yọkuro lati akopọ ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

8) Awọn pipaṣẹ console.log ('Bye') ti wa ni afikun si awọn ipe akopọ.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

9) Aṣẹ console.log ('Bye') ti ṣiṣẹ.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

10) Awọn pipaṣẹ console.log ('Bye') ti wa ni kuro lati awọn ipe akopọ.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

11) Lẹhin ti o kere ju 5000 ms ti kọja, aago naa dopin ati gbe cb1 ipe pada sinu isinyi ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

12) Lupu iṣẹlẹ gba iṣẹ cb1 lati isinyi ipe ati gbe e sori akopọ ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

13) Iṣẹ cb1 ti ṣiṣẹ ati ṣafikun console.log ('cb1') si akopọ ipe.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

14) Awọn pipaṣẹ console.log ('cb1') ti wa ni ṣiṣẹ.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

15) Awọn pipaṣẹ console.log ('cb1') ti wa ni kuro lati awọn ipe akopọ.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

16) Iṣẹ cb1 kuro lati akopọ ipe.

Jẹ ki a wo apẹẹrẹ kan ninu iṣesi:

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

O dara, a wo bawo ni a ṣe ṣe imuse asynchrony ni JavaScript. Bayi jẹ ki a sọrọ ni ṣoki nipa itankalẹ ti koodu asynchronous.

Awọn itankalẹ ti asynchronous koodu.

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

Eto Asynchronous bi a ti mọ ọ ni JavaScript le ṣee ṣe nipasẹ awọn iṣẹ nikan. Wọn le kọja bi iyipada miiran si awọn iṣẹ miiran. Eleyi jẹ bi callbacks won bi. Ati pe o tutu, igbadun ati ere, titi o fi yipada si ibanujẹ, ibanujẹ ati ibanujẹ. Kí nìdí? O rọrun:

  • Bi idiju ti koodu naa ṣe n pọ si, iṣẹ akanṣe naa yarayara yipada si aibikita, awọn bulọọki itẹle leralera - “apaadi ipe pada”.
  • Mimu aṣiṣe le rọrun lati padanu.
  • O ko le da awọn ikosile pada pẹlu ipadabọ.

Pẹlu dide ti Ileri, ipo naa dara diẹ sii.

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

  • Awọn ẹwọn ileri han, eyiti o ni ilọsiwaju kika kika koodu
  • Ọna lọtọ fun mimu awọn aṣiṣe ti han
  • Ṣafikun iṣeeṣe ti ipaniyan ni afiwe nipa lilo Promise.all
  • A le yanju asynchrony itẹle nipa lilo async/duro

Ṣugbọn awọn ileri ni awọn idiwọn wọn. Fun apẹẹrẹ, a ko le fagile ileri kan laisi jijo pẹlu tambourin, ati ohun ti o ṣe pataki julọ ni pe o ṣiṣẹ pẹlu iye kan.

O dara, a ti ni irọrun sunmọ siseto ifaseyin. O rẹwẹsi? O dara, da, o le lọ ṣe tii diẹ, ronu nipa rẹ ki o pada wa lati ka diẹ sii. Emi o si tesiwaju.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Ifaseyin siseto jẹ apẹrẹ siseto ti o dojukọ lori awọn ṣiṣan data ati itankalẹ iyipada. Jẹ ki a ṣe akiyesi diẹ sii kini ṣiṣan data jẹ.

// Получаем ссылку на элемент
const input = ducument.querySelector('input');

const eventsArray = [];

// Пушим каждое событие в массив eventsArray
input.addEventListener('keyup',
    event => eventsArray.push(event)
);

Jẹ ki a fojuinu pe a ni aaye titẹ sii. A n ṣẹda akojọpọ ati fun gbogbo bọtini bọtini ti iṣẹlẹ titẹ sii a yoo tọju iṣẹlẹ naa sinu titobi wa. Ni akoko kanna, Emi yoo fẹ lati ṣe akiyesi pe titobi wa jẹ lẹsẹsẹ nipasẹ akoko, i.e. atọka ti awọn iṣẹlẹ nigbamii ti o tobi ju itọka ti awọn iṣaaju lọ. Iru opo yii jẹ awoṣe irọrun ti sisan data, ṣugbọn kii ṣe sisan sibẹsibẹ. Ni ibere fun titobi yii lati pe ni ṣiṣan lailewu, o gbọdọ ni anfani lati sọ fun awọn alabapin bakan pe data titun ti de ninu rẹ. Bayi a wa si itumọ ti sisan.

ṣiṣan data

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

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

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Sisan jẹ titobi data lẹsẹsẹ nipasẹ akoko ti o le fihan pe data ti yipada. Bayi fojuinu bawo ni o ṣe rọrun lati kọ koodu ninu eyiti iṣe kan nilo pipe awọn iṣẹlẹ pupọ ni awọn ẹya oriṣiriṣi ti koodu naa. A kan ṣe alabapin si ṣiṣan ati pe yoo sọ fun wa nigbati awọn ayipada ba waye. Ati awọn RxJs ìkàwé le ṣe eyi.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

RxJS jẹ ile-ikawe fun ṣiṣẹ pẹlu asynchronous ati awọn eto ti o da lori iṣẹlẹ nipa lilo awọn ilana akiyesi. Awọn ìkàwé pese a ipilẹ iru Akiyesi, orisirisi awọn arannilọwọ (Oluwoye, Awọn oluṣeto, Awọn koko-ọrọ) ati awọn oniṣẹ fun ṣiṣẹ pẹlu awọn iṣẹlẹ bi pẹlu awọn akojọpọ (map, àlẹmọ, din, gbogbo ati awọn ti o jọra lati JavaScript Array).

Jẹ ki a loye awọn imọran ipilẹ ti ile-ikawe yii.

Ohun akiyesi, Oluwoye, Olupilẹṣẹ

Ohun akiyesi jẹ iru ipilẹ akọkọ ti a yoo wo. Kilasi yii ni apakan akọkọ ti imuse RxJs. O ni nkan ṣe pẹlu ṣiṣan akiyesi, eyiti o le ṣe alabapin si lilo ọna ṣiṣe alabapin.

Ohun akiyesi ṣe imuse ẹrọ oluranlọwọ fun ṣiṣẹda awọn imudojuiwọn, ohun ti a pe Oluwoye. Orisun awọn iye fun Oluwoye ni a pe o nse. Eyi le jẹ apẹrẹ, atunto, iho wẹẹbu, iru iṣẹlẹ kan, ati bẹbẹ lọ. Nitorinaa a le sọ pe akiyesi jẹ oludari laarin Olupilẹṣẹ ati Oluwoye.

Ti o ṣe akiyesi ṣe itọju awọn oriṣi mẹta ti awọn iṣẹlẹ Oluwoye:

  • tókàn - titun data
  • aṣiṣe – aṣiṣe ti ọkọọkan ba pari nitori iyasọtọ. iṣẹlẹ yii tun tumọ si ipari ti ọkọọkan.
  • pipe — ifihan agbara nipa awọn Ipari ti awọn ọkọọkan. Eyi tumọ si pe kii yoo si data tuntun mọ.

Jẹ ki a wo demo naa:

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Ni ibẹrẹ a yoo ṣe ilana awọn iye 1, 2, 3, ati lẹhin iṣẹju 1. ao gba 4 ao si pari ṣiṣan wa.

Lerongba jade ti npariwo wa

Ati lẹhinna Mo rii pe sisọ rẹ jẹ igbadun diẹ sii ju kikọ nipa rẹ. 😀

alabapin

Nigba ti a ba ṣe alabapin si ṣiṣan a ṣẹda kilasi tuntun ṣiṣe alabapineyi ti o fun wa ni agbara lati yọọ kuro nipa lilo ọna naa yọ kuro. A tun le ṣe akojọpọ awọn ṣiṣe alabapin nipa lilo ọna naa fi. O dara, o jẹ ọgbọn pe a le ṣe akojọpọ awọn okun ni lilo yọ. Awọn ọna fikun ati yọkuro gba ṣiṣe alabapin miiran bi titẹ sii. Emi yoo fẹ lati ṣe akiyesi pe nigba ti a ba yọ kuro, a yọkuro kuro ninu gbogbo awọn ṣiṣe alabapin ọmọ bi ẹnipe wọn pe ọna yiyọ kuro. Tẹ siwaju.

Orisi ti ṣiṣan

gbona
ÀWỌN

Olupese ti wa ni da ita observable
Olupese ti wa ni da inu observable

Data ti wa ni gbigbe ni akoko awọn observable wa ni da
Data ti pese ni akoko ṣiṣe alabapin

Nilo afikun kannaa fun yiyọ kuro
Okun naa pari lori ara rẹ

Nlo ibatan ọkan-si-ọpọlọpọ
Nlo ibatan ọkan-si-ọkan

Gbogbo awọn ṣiṣe alabapin ni itumọ kanna
Awọn iforukọsilẹ jẹ ominira

Data le sọnu ti o ko ba ni ṣiṣe alabapin
Tun gbogbo awọn iye ṣiṣan jade fun ṣiṣe alabapin titun kan

Lati fun ni afiwe, Emi yoo ronu ti ṣiṣan gbigbona bi fiimu kan ninu ile iṣere kan. Ni akoko wo ni o de, lati akoko yẹn o bẹrẹ wiwo. Emi yoo ṣe afiwe ṣiṣan tutu si ipe kan ni imọ-ẹrọ. atilẹyin. Olupe eyikeyi n tẹtisi gbigbasilẹ ifohunranṣẹ lati ibẹrẹ si ipari, ṣugbọn o le gbekọ ni lilo yokuro.

Emi yoo fẹ lati ṣe akiyesi pe awọn ohun ti a pe ni ṣiṣan gbona tun wa (Mo ti wa kọja asọye yii lalailopinpin ṣọwọn ati ni awọn agbegbe ajeji) - eyi jẹ ṣiṣan ti o yipada lati ṣiṣan tutu si ọkan ti o gbona. Ibeere naa waye - nibo ni lati lo)) Emi yoo fun apẹẹrẹ lati adaṣe.

Mo n ṣiṣẹ pẹlu Angular. O nlo awọn rxjs ni itara. Lati gba data si olupin naa, Mo nireti okun tutu ati lo o tẹle ara yii ninu awoṣe nipa lilo asyncPipe. Ti Mo ba lo paipu yii ni ọpọlọpọ igba, lẹhinna, pada si asọye ti ṣiṣan tutu, pipe kọọkan yoo beere data lati ọdọ olupin, eyiti o jẹ ajeji lati sọ kere julọ. Ati pe ti MO ba yi ṣiṣan tutu pada si ọkan ti o gbona, lẹhinna ibeere naa yoo ṣẹlẹ lẹẹkan.

Ni gbogbogbo, agbọye iru awọn ṣiṣan jẹ ohun ti o ṣoro fun awọn olubere, ṣugbọn pataki.

awọn oniṣẹ

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

Awọn oniṣẹ pese wa pẹlu agbara lati faagun agbara wa lati ṣiṣẹ pẹlu awọn ṣiṣan. Wọn ṣe iranlọwọ lati ṣakoso awọn iṣẹlẹ ti o waye ni Observable. A yoo wo awọn tọkọtaya ti o gbajumo julọ, ati awọn alaye diẹ sii nipa awọn oniṣẹ le ṣee ri nipa lilo awọn ọna asopọ ni alaye to wulo.

Awọn oniṣẹ - ti

Jẹ ká bẹrẹ pẹlu awọn onišẹ oluranlowo ti. O ṣẹda Ohun akiyesi da lori iye ti o rọrun.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ - àlẹmọ

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Oṣiṣẹ àlẹmọ, gẹgẹbi orukọ ṣe daba, ṣe asẹ ifihan agbara ṣiṣan naa. Ti oniṣẹ ba pada ni otitọ, o fo siwaju sii.

Awọn oniṣẹ - gba

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

gba - Gba iye ti awọn nọmba ti emitters, lẹhin eyi ni o tẹle ara dopin.

Awọn oniṣẹ - debounceTime

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

debounceTime - sọ awọn iye ti o jade kuro ti o ṣubu laarin aarin akoko pàtó laarin awọn abajade - lẹhin ti aarin akoko ti kọja, njade iye ti o kẹhin.

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

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ - takeWhile

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Emits awọn iye titi di igba ti o pada eke, lẹhin eyi o yọkuro lati o tẹle ara.

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

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ - darapọLatest

Oṣiṣẹ apapọLatest jẹ itumo iru si promise.all. O daapọ ọpọ awọn okun sinu ọkan. Lẹhin okun kọọkan ṣe o kere ju itujade kan, a gba awọn iye tuntun lati ọdọ ọkọọkan ni irisi akojọpọ. Siwaju sii, lẹhin itujade eyikeyi lati awọn ṣiṣan ti a dapọ, yoo fun awọn iye tuntun.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, 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));

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ - zip

Zip - Nduro fun iye kan lati o tẹle ara kọọkan ati pe o ṣe apẹrẹ ti o da lori awọn iye wọnyi. Ti iye ko ba wa lati eyikeyi okun, lẹhinna ẹgbẹ ko ni ṣẹda.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, 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));

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ - forkJoin

forkJoin tun darapọ mọ awọn okun, ṣugbọn o njade iye nikan nigbati gbogbo awọn okun ba pari.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, 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);

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ - maapu

Oniṣẹ iyipada maapu naa yi iye emitter pada si ọkan tuntun.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, 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)
);

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

Awọn oniṣẹ – pin, tẹ ni kia kia

Oniṣẹ tẹ ni kia kia gba ọ laaye lati ṣe awọn ipa ẹgbẹ, iyẹn ni, eyikeyi awọn iṣe ti ko ni ipa lori ọkọọkan.

Oniṣẹ ohun elo ipin le yi ṣiṣan tutu sinu ọkan ti o gbona.

Eto Asynchronous ni JavaScript (Ipepada, Ileri, RxJs)

A ti pari pẹlu awọn oniṣẹ. Jẹ ki a lọ si Koko-ọrọ.

Lerongba jade ti npariwo wa

Ati lẹhinna Mo lọ mu tii diẹ. Awọn apẹẹrẹ wọnyi ti rẹ mi 😀

Ìdílé koko

Idile koko-ọrọ jẹ apẹẹrẹ akọkọ ti awọn ṣiṣan gbona. Awọn kilasi wọnyi jẹ iru arabara ti o ṣiṣẹ nigbakanna bi akiyesi ati oluwoye. Niwọn igba ti koko-ọrọ jẹ okun ti o gbona, o jẹ dandan lati yọọ kuro ninu rẹ. Ti a ba sọrọ nipa awọn ọna akọkọ, lẹhinna awọn wọnyi ni:

  • tókàn - gbigbe data titun si ṣiṣan
  • aṣiṣe - aṣiṣe ati ifopinsi okun
  • pipe - ipari ti o tẹle ara
  • ṣe alabapin – ṣe alabapin si ṣiṣan kan
  • yowo kuro – yowo kuro ninu ṣiṣan naa
  • asObservable - yipada sinu oluwoye
  • si Ileri - yipada sinu ileri

Awọn oriṣi 4 5 ti awọn koko-ọrọ wa.

Lerongba jade ti npariwo wa

Awọn eniyan mẹrin wa ti n sọrọ lori ṣiṣan, ṣugbọn o wa ni jade pe wọn ṣafikun ọkan diẹ sii. Bi wọn ṣe sọ, gbe ati kọ ẹkọ.

Koko-ọrọ Rọrun new Subject()– awọn alinisoro iru ti koko. Ti a ṣẹda laisi awọn paramita. Gbigbe awọn iye ti o gba nikan lẹhin ṣiṣe alabapin.

Koko-ọrọ ihuwasi new BehaviorSubject( defaultData<T> ) - ninu ero mi, iru koko ti o wọpọ julọ. Awọn igbewọle gba awọn aiyipada iye. Nigbagbogbo n fipamọ data ti atẹjade to kẹhin, eyiti o tan kaakiri nigbati ṣiṣe alabapin. Kilasi yii tun ni ọna iye to wulo, eyiti o da iye lọwọlọwọ ti ṣiṣan naa pada.

Koko-ọrọ Tunṣe new ReplaySubject(bufferSize?: number, windowTime?: number) - Awọn titẹ sii le ni iyan gba bi ariyanjiyan akọkọ iwọn ti ifipamọ ti awọn iye ti yoo fipamọ sinu ararẹ, ati bi keji akoko lakoko eyiti a nilo awọn ayipada.

Koko-ọrọ Async new AsyncSubject() - ko si ohun ti o ṣẹlẹ nigbati ṣiṣe alabapin, ati awọn iye yoo wa ni pada nikan nigbati pari. Nikan iye ti o kẹhin ti ṣiṣan naa yoo pada.

Koko-ọrọ WebSocket new WebSocketSubject(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>) - Iwe naa dakẹ nipa rẹ ati pe Mo n rii fun igba akọkọ. Ti ẹnikẹni ba mọ ohun ti o ṣe, jọwọ kọ a yoo fi kun.

Phew. O dara, a ti bo ohun gbogbo ti Mo fẹ sọ fun ọ loni. Mo nireti pe alaye yii wulo. O le ka atokọ awọn itọkasi funrararẹ ninu taabu alaye to wulo.

wulo alaye

orisun: www.habr.com

Fi ọrọìwòye kun