Bazele construirii aplicațiilor asincrone

Descrierea de bază a codului asincron

Este de așteptat ca în consolă să vedem "a", "b" și apoi după aproximativ 500 ms - "c", "d" și "e". Eu folosesc termenul "despre" deoarece, de fapt, setTimeout funcționează imprevizibil.





Chiar și în specificația HTML5, acesta afirmă: "Astfel, API nu garantează că timerul va fi executat exact conform programului specificat, întârzieri datorate încărcării procesorului, alte sarcini și alți factori sunt probabili".

Interesant este că timpul de expirare nu va fi executat până când nu se va executa tot codul rămas din bloc. Asta este, dacă este setat un timeout și atunci orice funcție este executată pentru o lungă perioadă de timp, timeout-ul nu va începe până când funcția nu este finalizată. În realitate, funcțiile asincrone setTimeout și setInterval sunt în coada de așteptare, cunoscute sub numele de bucla evenimentului.







Extinderea datelor asincrone folosind metoda jQuery $ .axax este un proces simplu de browser încrucișat care ascunde procesul real. De exemplu:

În mod obișnuit, dar incorect, se presupune că datele vor deveni disponibile imediat după ce apelați $ .axax. Dar realitatea pare diferită:

Obiectul XmlHttpRequest (xmlhttp) expediază cererea, iar funcția de returnare tratează evenimentul obiectului readystatechange. Xmlhttp execută ulterior metoda de trimitere. Deoarece funcționează xmlhttp, evenimentul readystatechange este generat de fiecare dată când proprietatea readyState este schimbată. și numai atunci când xmlhttp termină primirea răspunsului de la gazda la distanță, funcția de returnare va fi executată.

Lucrul cu codul asincron

Multe funcții din node.js sunt asincrone. Prin urmare, puteți găsi adesea o situație similară:

Și pe partea clientului puteți găsi acest cod:

Funcțiile de întoarcere nivelate pot provoca cu adevărat dezgust. Dar există mai multe soluții pentru acest stil de codificare. Problema nu este în limba de programare, ci în modul în care programatorii o folosesc.

Funcții numite

O soluție simplă pentru realizarea blocajelor funcțiilor de returnare este evitarea investițiilor mai adânci decât două niveluri. În loc să transmiteți o funcție anonimă argumentului unei funcții de returnare, utilizați o funcție denumită:

În plus, biblioteca async.js poate ajuta la gestionarea mai multor solicitări / răspunsuri AJAX. De exemplu:

Acest cod efectuează două funcții asincrone, iar fiecare funcție are o funcție de returnare "făcută", care este executată după terminarea funcției asincrone. Când sunt finalizate ambele funcții de returnare "done", funcția de returnare pentru paralel va fi executată pentru a rezolva toate erorile sau rezultatele ambelor funcții asincrone.

Promise (promisiune)

O promisiune reprezintă un eveniment eveniment care este returnat dintr-o singură terminare a operației.

Există multe biblioteci care au un model de promisiuni. jQuery folosește un API excelent promis. Obiectul amânat apare în versiunea 1.5, iar constructorul jQuery.Deferred este utilizat în funcții care se întorc în promisiuni. Funcțiile care revin promisiunilor fac anumite operații asincrone.

Aici sunt permise două funcții asincrone, rezultatul lor este așteptat și apoi o altă funcție este efectuată cu rezultatele primelor două apeluri.

În acest cod, metoda geocodului este executată de două ori și returnează o promisiune. Funcția asincronă apoi execută și rezolvă în funcția de retur. Apoi, de îndată ce amândoi rezolvă rezolvarea. efectuate atunci. Returnează rezultatul primelor două apeluri geocod. Rezultatele sunt transmise la getRoute. care, de asemenea, întoarce promisiunea. În cele din urmă, când promisiunea getRoute este rezolvată, funcția returnare doSomethingCoolWithDirections este executată.

Evenimentele reprezintă o altă soluție de comunicare atunci când funcțiile de returnare asincrone finalizează execuția. Un obiect poate deveni un emițător și poate genera un eveniment care va prinde un alt obiect. Acest tip de lucru cu evenimente este numit model de observator. Biblioteca backbone.js folosește o astfel de funcționalitate cu ajutorul Backbone.Events.

Există și alte biblioteci care folosesc acest model de lucru cu evenimente, cum ar fi jQuery Event Emitter. EventEmitter. monologue.js și node.js au modul EventEmitter.

Nu întoarceți niciodată promisiuni prin intermediul API-urilor publice. Această practică leagă utilizatorii API de promisiuni și complică actualizarea codurilor. Dar combinația de promisiuni pentru nevoile interne și evenimente pentru API-urile externe poate duce la apariția unei aplicații excelente și ușor întreținute.

Această abordare permite altor domenii de aplicare să răspundă la funcțiile de returnare asincronă fără a face referire directă la obiectul care generează solicitarea. ceea ce face posibilă actualizarea mai multor zone pe pagină atunci când se obține o direcție. În configurația normală jQuery Ajax, modificarea direcției n = necesită un apel cu funcție inversă de succes. Această abordare este dificil de întreținut, iar utilizarea mesajelor facilitează actualizarea mai multor domenii ale interfeței utilizator.

Alte implementări ale șablonului cu intermediarul sunt utilizate în bibliotecile se amplifică. PubSubJS și radio.js.

concluzie

Bazele construirii aplicațiilor asincrone

Prin obținerea de informații imediat prin două canale (vedere și auz), eficiența predării este mult mai mare decât învățarea din cărți. Și temele și testele online vă vor permite să gândiți în mod constant în limba pe care o învățați și să vă verificați imediat cunoștințele!

Bazele construirii aplicațiilor asincrone

Bazele construirii aplicațiilor asincrone

Dacă doriți să învățați HTML mult timp, atunci am o veste bună pentru dvs.!

Bazele construirii aplicațiilor asincrone

Dacă ați învățat deja HTML și doriți să treceți mai departe, următorul pas este să învățați tehnologia CSS.

Bazele construirii aplicațiilor asincrone

Dacă doriți să înțeleagă conceptele de domeniu si hosting, învață cum să creeze o bază de date, încărca fișiere pe un site web prin intermediul unui server FTP, crea subdomenii, configurați cutiile poștale pentru site-ul și să monitorizeze participarea, acest curs este conceput special pentru tine!







Trimiteți-le prietenilor: