Fundamentele de aplicații în construcții asincrone

Descrierea de bază a codului asincron

Este de așteptat ca vom vedea în consolă „a“, „b“, și apoi, după aproximativ 500 ms - „c“, „d“ și „e“. Eu folosesc termenul „aproximativ“, deoarece, în funcție de setTimeout realitate impredictibil. Chiar și în stările de specificație HTML5: „Astfel, API nu garantează că timer-ul va rula exact pe posibilitatea programul unei întârzieri din cauza sarcinii procesorului și alte probleme, precum și de alți factori.“.

Interesant, timpul de expirare nu va fi atât timp cât restul codului în bloc nu va fi executat. Aceasta este, în cazul în care un timeout este setat, atunci orice funcție este realizată pentru o lungă perioadă de timp, timpul de expirare începe numărătoarea inversă până când funcția este finalizată. În realitate, funcțiile asincrone setTimeout și setInterval din coada cunoscut sub numele de ciclul de evenimente.

regăsire asincronă a datelor folosind metoda jQuery $ .ajax este un proces simplu cross-browser care ascunde procesul real. De exemplu:

De obicei, dar în mod greșit, presupune că datele vor fi disponibile imediat după apelul la $ .ajax. Dar realitatea este diferită:

XMLHttpRequest obiect (xmlhttp) o cerere și funcția de apel invers procesează obiectul evenimentului readystatechange. Xmlhttp execută apoi metoda de trimitere. Pe măsură ce lucrați xmlhttp, eveniment readystatechange este generat de fiecare dată când readyState modificările de proprietate. și numai atunci când termina xmlhttp primi un răspuns de la gazda de la distanță va rula funcția de apel invers.

Lucrul cu codul asincron

Multe funcții în node.js sunt asincrone. Prin urmare, puteți găsi de multe ori o situație similară:

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

callback imbricate poate provoca de fapt dezgust. Dar există mai multe soluții pentru acest stil de codificare. Problema nu este un limbaj de programare, și modul în care programatorii îl folosesc.

funcții numite

O soluție simplă pentru greblarea funcții moloz apel invers - evitați să investească mai adânc decât două niveluri. În loc de a trece într-o funcție de apel invers funcție de argument anonim utilizează o funcție numită:

În plus, biblioteca async.js poate ajuta la tratarea mai multe cereri / răspunsuri AJAX. De exemplu:

Acest cod are două funcții asincrone, iar fiecare funcție are o funcție de apel invers „făcut“, care se efectuează după finalizarea unei funcții asincron. Atunci când ambele funcții de retur „făcut“ va fi finalizat, funcția de apel invers pentru procesare paralelă este executat pentru toate erorile sau rezultatele celor două funcții asincrone.

Promise (promisiune)

Promisiunea este un eveniment condus de un eveniment, revenirea funcționarea unității este finalizată.

Există multe biblioteci care au șablon de promisiuni. jQuery foloseste un alt promisiuni API. obiect Deferred a apărut în versiunea 1.5, iar jQuery.Deferred Designer este folosit în funcții care returnează promisiuni. Funcțiile care se întorc promite să efectueze un fel de operații asincrone.

Aici este capabil să execute două funcții asincrone, se așteaptă să producă și apoi a efectua alte funcții cu rezultatele primelor două apeluri.

În acest cod, metoda Geocodificarea este executat de două ori și se întoarce promit. Apoi, apeluri de funcții asincrone și soluționați în funcția de apel invers. Apoi, o dată testat, atât rezolva apelul. efectuate atunci. returnează rezultatul primelor două apeluri geocodificați. Rezultatele sunt transmise getRoute. care returnează, de asemenea, o promisiune. În cele din urmă, atunci când promisiunea getRoute permis ruleaza callback doSomethingCoolWithDirections.

Evenimentele sunt o altă soluție pentru comunicare, atunci când callback asincrone de execuție completă. Obiectul poate fi un emițător și să genereze un eveniment care va prinde celalalt obiect. Acest tip de evenimente se numește cu modelul de observație (model de observator). Biblioteca backbone.js folosește această opțiune folosind Backbone.Events.

Există și alte biblioteci folosind un model de evenimente, cum ar fi jQuery Emițătorul de evenimente. EventEmitter. monologue.js și node.js are modulul EventEmitter.

Niciodată nu a reveni promisiuni prin API publice. Această practică se leagă utilizatorii API la promisiuni și complică modernizarea codului. Dar combinația de promisiuni pentru uz intern și pentru evenimente externe API-ul poate provoca o dezlănțuite mare și ușor de întreținut.

Această abordare permite aplicației să răspundă la alte zone funcție de apel invers asincron fără referire directă la cererea de generare de obiect. Este ceea ce face posibil să se actualizeze câteva zone de pe pagina atunci când se transformă direcția. Într-o configurație tipică jQuery Ajax = n, atunci când schimbă direcția necesară apelului funcției inverse este de succes. Această abordare este dificil să se mențină, și utilizarea comunicațiilor facilitează în mare măsură actualizarea mai multe zone ale interfeței cu utilizatorul.

Alte implementări ale șablonului cu mediatorul sunt folosite Amplify biblioteci. PubSubJS și radio.js.

concluzie

Fundamentele de aplicații în construcții asincrone

Prin obținerea de informații de la două canale (vedere si auz) eficacitatea instruirii de învățare departe superioare de cărți. O temele pentru acasă și teste on-line vă va permite să se gândească în mod constant în limba țintă și imediat verifica cunoștințele!

Fundamentele de aplicații în construcții asincrone

Fundamentele de aplicații în construcții asincrone

Dacă doriți o lungă perioadă de timp pentru a studia modul în HTML, mi-ai, pentru ai vesti bune!

Fundamentele de aplicații în construcții asincrone

Dacă ați învățat deja HTML și doresc să avanseze, următorul pas va fi de a studia tehnologia CSS.

Fundamentele de aplicații în construcții 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!