Mapulogalamu asynchronous mu JavaScript (Callback, Promise, RxJs)
Moni nonse. SERGEY Omelnitsky akulankhula. Osati kale kwambiri ndidakhala ndi mtsinje pamapulogalamu okhazikika, pomwe ndidalankhula za asynchrony mu JavaScript. Lero ndikufuna kulemba zolemba pa nkhaniyi.
Koma tisanayambe nkhani yaikulu, tiyenera kulemba mawu oyamba. Ndiye tiyeni tiyambe ndi matanthauzo: kodi stack ndi mzere?
Okwana ndi zosonkhanitsira zomwe zinthu zake zimapezedwa komaliza, koyambirira kwa LIFO
Mzere ndi zosonkhanitsira zomwe zinthu zake zimapezedwa poyambira, zoyambira FIFO
Chabwino, tiyeni tipitilize.
JavaScript ndi chinenero cha pulogalamu ya ulusi umodzi. Izi zikutanthauza kuti pali ulusi umodzi wokha wogwiritsiridwa ntchito ndi mulu umodzi womwe ntchito zaimilira kuti zichitike. Chifukwa chake, JavaScript imatha kuchita opareshoni imodzi panthawi imodzi, pomwe ma opareshoni ena amadikirira nthawi yawo pa stack mpaka atayitanidwa.
kuitana stack ndi dongosolo la data lomwe, mwachidule, limalemba zambiri za malo mu pulogalamu yomwe tili. Ngati tidutsa mu ntchito, timakankhira kulowa kwake pamwamba pa stack. Tikabwerera kuchokera ku ntchito, timayika chinthu chapamwamba kwambiri kuchokera pamndandanda ndikubwerera komwe tidatcha ntchitoyo. Izi ndi zonse zomwe stack ingachite. Ndipo tsopano funso lochititsa chidwi kwambiri. Nanga asynchrony imagwira ntchito bwanji mu JavasScript?
M'malo mwake, kuwonjezera pa stack, asakatuli ali ndi mzere wapadera wogwira ntchito ndi zomwe zimatchedwa WebAPI. Zochita zomwe zili pamzerewu zichitika motsatira pokhapokha zitachotsedwa. Zitatha izi m'pamene amakankhidwa kuchokera pamzere kupita pamtengo kuti aphedwe. Ngati pali chinthu chimodzi pa stack pakadali pano, ndiye kuti sichingawonjezedwe pamndandandawo. Ndi chifukwa cha ichi kuti kuyimba ntchito pomaliza nthawi nthawi zambiri sikumakhala kolondola mu nthawi yake, chifukwa ntchitoyo siyingachoke pamzere kupita ku stack ili yodzaza.
Kubwera kwa Promise zinthu zidayamba kuyenda bwino.
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);
});
Maunyolo alonjezano adawonekera, zomwe zidapangitsa kuti ma code aziwerengeka
Njira ina yopezera zolakwika yawonekera
Anawonjezera kuthekera kwa kuphedwa kofanana pogwiritsa ntchito Promise.all
Titha kuthana ndi ma asynchrony okhala ndi zisa pogwiritsa ntchito async/ait
Koma malonjezo ali ndi malire ake. Mwachitsanzo, lonjezo silingatheke popanda kuvina ndi maseche, ndipo chofunika kwambiri, limagwira ntchito ndi mtengo umodzi.
Reactive Programmingβndi paradigm yamapulogalamu yomwe imayang'ana kwambiri kayendedwe ka data ndikusintha kufalitsa. Tiyeni tiwone mwatsatanetsatane zomwe mtsinje wa data uli.
Mumayendaβndi gulu la data losanjidwa ndi nthawi yomwe ingasonyeze kuti deta yasintha. Tsopano ganizirani momwe zimakhalira zosavuta kulemba nambala yomwe chinthu chimodzi chimafuna kuyitanira zochitika zingapo m'magawo osiyanasiyana a code. Timangolembetsa kumtsinjewu ndipo udzatidziwitsa zikasintha. Ndipo laibulale ya RxJs imatha kuchita izi.
RxJS ndi laibulale yogwirira ntchito ndi mapulogalamu osasinthika komanso okhudzana ndi zochitika pogwiritsa ntchito zotsatizana zowoneka. Laibulale imapereka mtundu woyambira Zowoneka, mitundu yambiri yothandizira (Wowonera, Okonza, Nkhani) ndi ogwira ntchito kuti agwire ntchito ndi zochitika monga zosonkhanitsa (mapu, fyuluta, kuchepetsa, chirichonse ndi ofanana ndi JavaScript Array).
Tiyeni timvetsetse mfundo zofunika za laibulale imeneyi.
Zowoneka, Wowonera, Wopanga
Chowoneka ndi mtundu woyamba womwe tiwona. Kalasi iyi ili ndi gawo lalikulu la kukhazikitsa kwa RxJs. Zimalumikizidwa ndi mtsinje wowoneka, womwe ungalembetsedwe pogwiritsa ntchito njira yolembetsa.
Observable imagwiritsa ntchito njira yothandizira popanga zosintha, zomwe zimatchedwa Wopenya. Magwero amtengo wapatali kwa Observer amatchedwa Producer. Izi zitha kukhala mndandanda, iterator, socket yapaintaneti, zochitika zamtundu wina, ndi zina. Chifukwa chake titha kunena kuti chowoneka ndi chowongolera pakati pa Wopanga ndi Observer.
Zowoneka zimagwira mitundu itatu ya zochitika za Observer:
yotsatira - deta yatsopano
cholakwika - cholakwika ngati mndandanda udatha chifukwa chosiyana. chochitika ichi chikutanthauzanso kutha kwa ndondomekoyi.
wathunthu - chizindikiro cha kutha kwa mndandanda. Izi zikutanthauza kuti sipadzakhalanso deta yatsopano.
The combineLatest operator ndi yofanana ndi lonjezo.all. Zimaphatikiza ulusi wambiri kukhala umodzi. Ulusi uliwonse utatha kutulutsa kamodzi, timapeza zaposachedwa kwambiri kuchokera pamtundu uliwonse. Komanso, pambuyo pa kutulutsa kulikonse kwa mitsinje yophatikizidwa, ipereka zikhalidwe zatsopano.
Zip - Imadikirira mtengo kuchokera ku ulusi uliwonse ndikupanga mndandanda kutengera izi. Ngati mtengowo suchokera ku ulusi uliwonse, ndiye kuti gululo silidzapangidwa.