Kuriant Node.js programas labai svarbu suprasti ir dirbti su įvykių tvarkymu bei asinchroniniu apdorojimu. Node.js sukurtas remiantis įvykiais pagrįstu ir asinchroniniu modeliu, leidžiančiu atlikti užduotis nelaukiant, kol jos bus baigtos. Tiesą sakant, įvykių tvarkymo ir asinchroninio apdorojimo supratimas ir teisingas taikymas yra esminė programos našumo optimizavimo dalis.
Įvykiai ir atgaliniai skambučiai Node.js
„Node.js“ įvykiai ir atgaliniai skambučiai atlieka lemiamą vaidmenį tvarkant asinchronines operacijas. Įvykiai yra būdas tvarkyti ir reaguoti į tam tikrus veiksmus ar įvykius, vykstančius programoje. Kita vertus, atgaliniai skambučiai yra funkcijos, kurios vykdomos pasibaigus tam tikram įvykiui ar operacijai.
Node.js suteikia įvykiais pagrįstą architektūrą, kurioje įvairios programos dalys gali skleisti įvykius ir klausytis jų. Tai leidžia efektyviai ir neblokuojančiai apdoroti kelias operacijas vienu metu.
Atgaliniai skambučiai paprastai naudojami Node.js, kad būtų galima atlikti asinchronines operacijas. Jie perduodami kaip argumentai funkcijoms ir vykdomi, kai operacija baigta. Atgaliniai skambučiai suteikia galimybę tvarkyti rezultatus arba klaidas, atsirandančias atliekant asinchronines užduotis.
Štai pavyzdys, kaip naudojant Node.js atgalinį skambutį:
// A function that takes a callback
function fetchData(callback) {
// Simulate fetching data from an asynchronous operation
setTimeout(() => {
const data = { name: 'John', age: 30 };
callback(null, data); // Pass the data to the callback
}, 2000); // Simulate a 2-second delay
}
// Call the fetchData function and provide a callback
fetchData((error, data) => {
if (error) {
console.error('Error:', error);
} else {
console.log('Data:', data);
}
});
Šiame pavyzdyje turime funkciją fetchData, kuri imituoja duomenų gavimą iš asinchroninės operacijos (pvz., API skambučio arba duomenų bazės užklausos). Atšaukimo funkcija naudojama kaip argumentas.
Funkcijos viduje mes fetchDatanaudojame setTimeoutasinchroninei operacijai imituoti. Po 2 sekundžių delsos sukuriame kai kuriuos pavyzdinius duomenis ir perduodame juos atgalinio skambinimo funkcijai kartu su klaida (kuri nullšiuo atveju nustatyta).
Už fetchDatafunkcijos ribų mes ją vadiname ir teikiame atgalinio skambinimo funkciją. Atgalinio skambučio metu tvarkome visas galimas klaidas ir apdorojame gautus duomenis. Jei įvyksta klaida, ją įrašome į konsolę. Kitu atveju duomenis registruojame.
Tai yra pagrindinis pavyzdys, kaip naudojant Node.js atgalinį skambutį, kad būtų galima atlikti asinchronines operacijas ir užtikrinti, kad duomenys būtų apdoroti, kai tik jie bus pasiekiami. Realaus pasaulio scenarijuose atgaliniai skambučiai dažniausiai naudojami duomenų bazių užklausoms, API užklausoms ir kitoms asinchroninėms užduotims tvarkyti.
Asinchroniškumo valdymui naudojant pažadus ir asinchronizavimą / laukimą
„Promise“ ir „async/wait“ naudojimas asinchroninėms operacijoms tvarkyti“ yra įprastas „Node.js“ metodas, leidžiantis lengvai ir efektyviai tvarkyti asinchronines užduotis. „Pažadas“ yra „JavaScript“ objektas, padedantis valdyti ir tvarkyti asinchronines operacijas, o „async/wait“ yra sintaksė, leidžianti rašyti asinchroninį kodą panašiai kaip sinchroninis kodas.
Naudodami Promise ir async/await, galime lengviau ir intuityviau parašyti asinchroninį kodą. Mums nebereikia naudoti atgalinio skambinimo funkcijų ir susidoroti su atgalinio skambučio pragaru (įdėtosios atgalinio skambinimo funkcijos), kad galėtume atlikti asinchronines operacijas. Vietoj to galime naudoti laukimo raktinį žodį, kad palauktume, kol pažadas bus įvykdytas ir grąžins jo rezultatą.
Pateikiame „Promise“ ir „async/await“ naudojimo „Node.js“ asinchroninėms operacijoms tvarkyti pavyzdys:
// A mock function to fetch data from an API
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = { name: 'John', age: 30 };
resolve(data); // Return data within the Promise
}, 2000);
});
}
// Using async/await to handle asynchronous operations
async function getData() {
try {
const data = await fetchData(); // Wait for the Promise to complete and return the data
console.log('Data:', data);
} catch (error) {
console.error('Error:', error);
}
}
// Call the getData function
getData();
Šiame pavyzdyje funkciją naudojame fetchDataduomenų gavimui iš API (arba bet kokios asinchroninės operacijos) modeliuoti. Ši funkcija grąžina pažadą, kai iškviečiame resolvefunkciją grąžinti duomenis.
Už funkcijos ribų klaidoms tvarkyti fetchDatanaudojame bloką. try/catchFunkcijoje getDatanaudojame awaitraktinį žodį, norėdami laukti, kol pažadas bus baigtas ir grąžinti duomenis. Jei pažade yra klaida, ji padarys išimtį ir mes ją tvarkome bloke catch.
Galiausiai iškviečiame getDatafunkciją, kad pradėtume asinchroninį apdorojimą. Rezultatas bus įrašytas į konsolę, kai pažadas bus baigtas ir grąžinami duomenys.
Naudojant Promise ir async/wait mūsų kodas tampa lengviau skaitomas ir lengviau suprantamas atliekant asinchronines operacijas. Tai padeda mums išvengti atgalinio pragaro ir leidžia mums rašyti kodą nuosekliai, panašiai kaip rašant sinchroninį kodą.
Išvada: Įvykių tvarkymas ir asinchroninis apdorojimas yra du esminiai aspektai kuriant Node.js programas. Suprasdami ir teisingai naudodami susijusias sąvokas bei įrankius, galite kurti efektyvias, lanksčias ir patikimas programas Node.js platformoje.