Pe măsură ce îmi construiam proiectul final pentru Școala Flatiron, mi-am dat seama cât de mult îmi plăcea să scriu codificarea din spate. Am învățat Ruby în profunzime și chiar mi-am petrecut câteva săptămâni doar făcând probleme cu Leetcode pentru a învăța și mai multe detalii ale limbii. Așa cum și-ar fi dorit Mats, am fost foarte fericit să codific în Ruby!

„Sper să văd că Ruby ajută fiecare programator din lume să fie productiv, să se bucure de programare și să fie fericit. Acesta este scopul principal al limbajului Ruby.” —Matz on Ruby 1.9, Google TechTalks 2008

Pe măsură ce codificam, mi-am dat seama că nu am făcut o revizuire solidă a unui subiect foarte important din Faza 1 din școala Flatiron: codul asincron! Nu mă înțelege greșit, mi-a plăcut să scriu și pe front-end, deși când am întâlnit probleme legate de starea în React, a trebuit să mă opresc și să mă scarpin în cap...

Aș fi putut jura că am apelat acest lucru... de ce nu pot să-mi dau seama de ce nu se actualizează...? Îmi pierd mințile!?

Nu îmi pierdeam mințile, dar mi-am luat ceva timp pentru a perfecționa asincronizarea! Deci, iată un exemplu.

Blocurile de cod sincron se referă la codul care rulează o linie după alta, de exemplu...

Când rulez fișierul, blocurile se imprimă în ordinea cum ar trebui. Dar ce se întâmplă dacă aș face o solicitare de preluare la o cantitate enormă de date care durează extrem de mult să primească?

Acest lucru ar dura aparent pentru totdeauna și cu siguranță nu este eficient, așa că haideți să ne aprofundăm în codul asincron!

Exemplu de atribuire în sala de clasă

Imaginați-vă că predați o clasă de algebră în primul an și clasa dvs. include 20 de studenți care își finalizează cu toții munca la clasă într-un ritm diferit. Aveți două fișe de lucru pe care să le completeze astăzi, dar nu mai aveți nimic altceva de făcut.

O opțiune ar putea fi să înmânați fișele de lucru și să le spuneți elevilor să vi le înmâneze într-o grămadă când au terminat toate. Trebuie să le notezi, așa că sună rezonabil, nu?

Dar dacă vrei să alergi când iese școala sau să mergi la cină cu prietenii? Acest lucru vă va face înapoi cu o oră în timp ce stați acolo în clasă, așteptând ca toți elevii să termine! Nu, asta nu va merge.

Împărțiți temele cu aceste instrucțiuni: pe măsură ce fiecare elev termină fiecare fișă de lucru în ritmul său, predați-o pentru a o nota pe rând. În acest fel, puteți nota fișele de algebră pe măsură ce timpul petrecut în clasă continuă și puteți merge la acea alergare (sau a mânca să mănânce) imediat după oră! Aceasta este baza codului asincron!

Utilizarea solicitărilor de preluare

Iată un exemplu de solicitare de preluare din proiectul meu de faza 5 pentru Școala Flatiron (complet public pe Github al meu!).

Să împărțim acest lucru în părțile relevante.

Deci, pe baza numelui și metodei funcției, puteți spune clar că aceasta este o funcție care este folosită pentru a edita informațiile despre un articol!

Mai întâi, facem apelul „fetch()” și scriem în URL la o sursă de date pentru argument. Aceasta returnează apoi un obiect pe care îl numim metoda json(), care returnează o Promisiune (deocamdată să nu ne concentrăm pe obiectul Promise). trebuiesă folosiți metoda json() pentru a utiliza datele în pasul următor, folosind apelul metodei then().

Metoda then() preia obiectul pe care tocmai l-am primit de la primul apel (numit adesea „date”) și folosește logica condiționată pentru a decide ce funcție de apel invers rulează!

În acest caz, dacă obiectul de date nu include erori, apelez funcția handleEditItem pentru a actualiza acel articol! Dacă există erori în datele de răspuns, am setat erorile (apelul setErrors) la „data.errors”!

Acest lucru este imediat asincron din cauza cererii de preluare, care atunci când este apelată, următoarele .then care sunt înlănțuite se pregătesc de plecare! De îndată ce promisiunea de la preluare este returnată, funcțiile rămase sunt deja pregătite și gata de rulare!

Gânduri finale

Sper că acest ghid rapid prezintă un exemplu simplu pentru a explica valoarea codului asincron! Dacă nu ar fi asincron, rularea aplicațiilor ar putea dura o veșnicie sau pur și simplu ar putea să se întrerupă dacă ceva, cum ar fi cererea fetch() eșuează! De asemenea, dacă te apuci de dezvoltarea backend-ului, nu subestima și complexitatea front-end-ului!