25. päev (5. nädal) - väike erinevus järgmise () ja naasmise järgmise () vahel

Enne kui jõuan vahet järgmise () ja järgmise () naasmise vahel, tahaksin päeva kokku võtta.

Meie tavaline reedene vestlus koosnes mõningatest teadaannetest, mõnest teabest karjääriteenuste ja edasiliikumise plaani kohta ning paarist projektidest, mille kallal me töötasime. Arvatakse, et oma koodi esitledes saame koodist paremini rääkida. Ma arvan, et see on suurepärane asi, mida teha, ainult soovin, et meil oleks selleks rohkem aega. Üks minu edasiliikumise soovitusi on see, et meil oleks Githubis rohkem ametlikke koodide ülevaateid, et harjutada samade tööriistadega, mida tõenäoliselt kasutame töökohal teiste inimeste koodide ülevaatamiseks ja kommenteerimiseks.

Samuti pidasin toreda üks-ühele kohtumise oma elulookirjelduse ja kaaskirjade kohta ettevõtetele, kellele olen huvitatud kandideerimisest. Kõik on nii organiseeritud ja kursis, kuidas edasi liikuda. Võin öelda, et tarkvaraarenduses töö leidmiseks on sügavad kogemused ja teadmised. Loodan, et suudan seda teavet kasutada ja seda koolituse lõppedes töö leidmisel kasutada.

Hea küll, järgmine erinevus () ja järgmine () naasmise vahel on erinev. Ma märkasin seda esimest korda mitu päeva tagasi, töötades öises kodutöös mõnda näidiskoodi läbi. Me kasutame Expressi marsruutide määratlemiseks ja see, mida ma nägin, oli midagi sellist.

app.get ('/ post', funktsioon (req, res, next) {
  Post.findById (1234). Seejärel (funktsioon (postitage, viga) {
    if (eks) {
      naase järgmine (viga);
    }
    if (! post) {
      var notFound = uus viga ('Postitust ei leitud!');
      notFound.status = 404;
      naase järgmine (notFound);
    }
    res.send (post);
  });
});

Siin käsitleme tee / postituse GET-taotlust. Tagasihelistamisel näib, et helistame mingil viisil Post.findById, mis on tõenäoliselt andmebaasi päring. Kuna see hõlmab andmebaasile jõudmist ja lubaduse tagastamist - mis on ka .ndi kasutamisest ilmne - vaatame selle funktsiooni sisse. Täpsemalt näeme, et kui (viga) on tõene, tehakse järgmine (err) tagasipöördumise kutse. Pärast seda on meil veel üks if (! Post), mis jällegi naaseb järgmisel (notFound) ja kui me viga ei saanud ja postituses on mingisuguseid andmeid, helistame res.send (post), kes saadab tulemuse andmebaasipäringu tagasi brauserisse.

Teistes näidetes näeksin midagi sellist.

app.get ('/ foo',
funktsiooni kontrollRegistreerimine (req, res, next) {
  if (! req.user.registered) {
    // Kui kasutaja pole registreerunud, liikuge järgmisele marsruudile.
    // getRegistrationi ei teostata.
    järgmine ('marsruut')
  }
}, funktsioon getRegistration (req, res, next) {
  Registration.find (funktsioon (ekslik, andmed) {
    if (eks) naase järgmine (err)
    res.json (andmed)
  });
});

Selles näites helistame lihtsalt järgmisele (marsruut). Niisiis on loomulik küsimus, mis vahe on tagasituleku kasutamisel või mitte?

Nagu ma täna avastasin, selgub, et marsruudil olev järgmine () kõne EI jäta kohe funktsiooni ja jätkub järgmisele marsruudile. Sel juhul hinnatakse ülejäänud marsruuti ja kuna kutsuti järgmine (), pole vaja taotlust lahendada ja saame lihtsalt liikuda järgmisele sobivale marsruudi käitlejale.

Kiire kõrvale: pidage meeles, et kui te ei lahenda taotlust marsruudi sees, ei saada Express midagi brauserisse tagasi ja te jääte rippuma.

Nii et marsruudi seest järgmisele () helistades öeldakse lihtsalt Ekspressile, et ta peaks jätkama ülejäänud marsruudiga ja seejärel liikuma järgmisele sobivale marsruudile.

Vastupidiselt sellele helistage marsruudilt tagasi järgmisele (). Oluline erinevus on see, et kui helistate tagasi järgmisele (), jätab täitmine funktsiooni kohe ja liigub järgmisele vastavale marsruudile. See sarnaneb erandi viskamise käitumisega. Meie marsruudil on midagi juhtunud ja soovime jätta marsruudil allesjäänud koodi vahele ja hüpata järgmisele vastavale marsruudile.

Minu tänane probleem oli proovida käivitada päring MongoDB-le, kus minu rakenduse jaoks on salvestatud kõik mu kasutajanimed ja paroolid. Kui jõudsin POST-päringuni, mis sai kasutajanime ja parooli, mille klient just esitas, pean käivitama päringu, et näha, kas andmebaasis on vastav kirje. See on asünkroonne tagasihelistamise funktsiooniga kõne. Expressi osas jätkab ta minu koodi täitmist, oodates tulemuse tulekut andmebaasist.

Selgub, et see on minu jaoks halb. Kuna Express ootab andmete andmebaasist tagasi jõudmist, jätkatakse täitmist ja hakkan seda tõrketeadet nägema.

Viga: päiseid ei saa pärast nende saatmist seada.

See on Express, mis jätkub, kui ma seda tegelikult ei soovinud. Olin kasutanud järgmist (), kui ma tõesti tahtsin kasutada naasmist järgmisel ().

Selle mõistmine oli täna minu jaoks tohutu. Tore on lõpule viia mõni päev tagasi avatud ahel, mõtlesin, mis vahe neil kahel kõnel on. Nüüd saan tagasi minna ja koristada selle projekti koodi.

Viimane asi - täna ilmus uus iganädalane projekt. Peame kodeerima veebilehe, mis võimaldab teil mängida klassikalist Hangmani mängu. Ma tegelen sellega sel nädalavahetusel! :-)