Ziua 25 (săptămâna 5) - diferența subtilă dintre următoarea () și întoarcerea ()

Înainte de a rezuma diferența dintre apelarea la următorul () și următorul (), vreau să rezum ziua.

Tipicul nostru de Friday Huddle a constat în câteva anunțuri, servicii de carieră și câteva informații de perspectivă și câteva prezentări la care am lucrat. Oferind feedback-ul nostru, ne îmbunătățim conversația despre cod. Cred că este un lucru bun, ne-ar plăcea să petrecem mai mult timp cu asta. Una dintre sugestiile mele pentru a merge mai departe este revizuirea codurilor oficiale pe Github, pentru a afla cum să utilizăm instrumentele pe care le folosim pentru a vizualiza și interpreta codurile altor persoane la locul de muncă.

Am avut o întâlnire unu la unu despre CV-ul meu și am solicitat scrisori către companiile la care doream să depun o cerere. Toată lumea este atât de organizată și conștientă de a merge mai departe. Pot spune că aveți o experiență profundă și cunoaștere a modului de a găsi un loc de muncă în dezvoltarea de software. Sper să pot obține aceste informații și să le folosesc pentru a găsi un loc de muncă la sfârșitul acestei formări.

Despre diferența dintre apelarea la următorul () și următorul (()) am observat acest lucru în urmă cu câteva zile când lucram prin unele coduri pentru noaptea de acasă. A fost așa.

app.get ('/ post', funcție (req, res, următor) {Post.findById (1234) .then (funcție (post, err) {if (eroare) {return next (err);} if (! post ) {var notFound = new Error ('Mesajul nu a fost găsit!'); notFound.status = 404; returnare următoare (notFound);} res.send (post);});});

Aici ne uităm la o solicitare GET pe track / post. La întoarcerea unui apel, se pare că efectuăm orice apel către Post.findById, care este probabil o interogare a bazei de date. Pentru că asta presupune conectarea bazei de date și returnarea promisiunii. Atunci este clar - priviți în interiorul funcției. Mai exact, vedem că dacă (eroarea) este adevărată, suntem chemați să revenim la următorul (eroare). Apoi avem un alt (! Post), se va întoarce (notFound) și în final res.send (post), care va trimite rezultatul dacă nu am făcut greșeli și dacă conține informații. numesc). returnează solicitarea bazei de date în browser.

În alte exemple, aș vedea ceva similar.

app.get ('/ foo', Verificare CheckRegging (req, res, următor) {if (! req.user.registr) {// Accesați următoarea cale dacă utilizatorul nu este înregistrat // // getRegration eșuează. err) res.json (date)});});

În acest exemplu, apelăm pur și simplu („ruta”). Deci, întrebarea firească este: Care este diferența între utilizarea returnării?

După cum știu astăzi, următorul () apel din cadrul traseului nu părăsește funcția imediat și nu merge la următorul itinerar. În acest caz, restul traseului este evaluat și de când se numește următoarea (), nu este necesară rezolvarea cererii și pur și simplu trecem la următorul instrument de gestionare a rutei.

Luați rapid o notă: dacă nu rezolvați solicitarea pe ruta, nu uitați că Express nu trimite nimic browserului și vă atârnă.

Așadar, apelând la următorul () număr din interiorul rutei, pur și simplu spune Express că restul rutei trebuie să continue și să treacă la următoarea rută adecvată.

Comparați acest lucru cu apelarea la următorul () de pe traseu. Diferența importantă este că atunci când apelați la următorul (), execuția părăsește imediat funcția și trece la următoarea rută de potrivire. Pare o fotografie de excepție. Ceva s-a întâmplat în itinerarul nostru și vom săriți codul rămas pe itinerar și vom trece pur și simplu la următoarea rută adecvată.

Problema mea a fost încercarea de a trimite o solicitare către MongoDB, unde toate numele de utilizator și parola sunt stocate pentru aplicația mea. Când primesc o solicitare POST prin care clientul are numele de utilizator și parola furnizate de acesta, trebuie să rulez interogarea pentru a vedea dacă există o legătură în baza de date. Acesta este un apel asincron cu o funcție de apelare inversă. În ceea ce privește Express, va continua să-mi execute codul, așteptând să se întoarcă din baza de date.

Înseamnă că îmi este rău. Deoarece Express așteaptă să se întoarcă din baza de date, execuția este în curs și voi începe să văd mesajul de eroare.

Eroare: nu s-au putut instala anteturile după trimitere.

Această viteză Express va continua atunci când nu o doresc cu adevărat. Când am vrut să folosesc return next (), am folosit next ().

Pentru mine a fost prea mare să-mi dau seama astăzi. Uimit de care este diferența dintre cele două clopote și este plăcut să închei ciclul care s-a deschis acum câteva zile. Pot să mă întorc acum și să-mi șterg codul pentru acest proiect.

Un ultim lucru - un nou proiect săptămânal a apărut astăzi. Trebuie să codificăm o pagină web care vă permite să jucați jocul clasic al lui Hangman. O voi face în acest weekend! :-)