Node.js callback
Sziasztok!
(amennyiben egy szerkesztő úgy ítéli meg, hogy rossz fórumba küldtem a témát, nyugodtan áthelyezheti)
Hobbi szintem mostanság leginkább node.js-ben fejlesztek, és már többször belefutottam ebben a problémába. Nevezetesen, hogy hogyan "illik" kezelni a callback függvényeket.
Van az alábbi kód:A kód egy függvényben fut le, ami logikailag egy objektumhoz tartozik, és a
Tehát mi a célravezető? LegyenSzerintem ez túl sok gányolás (másrészt nem bolondbiztos), valami szebbet szeretnék.
A helyben kifejtés is lehet egy alternatíva, de ez sem szimpatikus, hisz egyrészt nem lesz újrahasznosítható a kód, másrészt a rövid metódusok híve vagyok, az egymásba pakolt függvények meg nem kifejezetten lesznek rövidek.
Még kitaláltam egy olyan módszert, hogy valahogy "megtartom" aItt ugye a
Szóval szerintetek melyik módszert érdemes használni? :)
■ (amennyiben egy szerkesztő úgy ítéli meg, hogy rossz fórumba küldtem a témát, nyugodtan áthelyezheti)
Hobbi szintem mostanság leginkább node.js-ben fejlesztek, és már többször belefutottam ebben a problémába. Nevezetesen, hogy hogyan "illik" kezelni a callback függvényeket.
Van az alábbi kód:
fs.readdir('./', callback);callback is ehhez az objektumhoz tartozik logikailag, tehát ilyen favágó JavaScript osztály. A probléma ott van, hogy az objektum metódusaiban az ember a this-t szereti használni, csak ugye a callback meghívásakor nem az lesz a this, amit az ember ugye várna. Erre lett ugye kitalálva a that-os bűvészkedés, csak ez egyrészt ronda, másrészt szerintem egyedül akkor szabad ilyet csinálni, ha a callback ott helyben van kifejtve (névtelen függvényként), de így meg kvázi nem "az objektum metódusa", nincs benne a prototype-ban.Tehát mi a célravezető? Legyen
that, és akkor nincs probléma a "láthatósággal", viszont ott lebeg az ember szeme előtt az a perverz eset, amikor a callback függvényt úgy hívja meg az ember, hogy a that nem is létezik. Mert gyakorlatilag semmi alapja nincs annak, hogy én a that létezését készpénznek veszek. Persze erre is lehete valami workaround:if(typeof that === 'undefined') { var that=this; }A helyben kifejtés is lehet egy alternatíva, de ez sem szimpatikus, hisz egyrészt nem lesz újrahasznosítható a kód, másrészt a rövid metódusok híve vagyok, az egymásba pakolt függvények meg nem kifejezetten lesznek rövidek.
Még kitaláltam egy olyan módszert, hogy valahogy "megtartom" a
this-t:fs.readdir('./', function(error, files){that.callback(error,files);});this szépen megmarad, de megint csak kicsit gányolásnak érzem a trükköt.Szóval szerintetek melyik módszert érdemes használni? :)



bind
Functionbind metódusát. Ezzel megadhatod, hogy mi legyen athisa callback függvényedben. Azaz:this-t újra kell értékelnie a kódnak, de ezek után a callback függvényeden belül athisaz lesz, amire számítasz (mindenesetre az, amit beállítottál).Vagy, hogyha gyakran hívod meg a
readfüggvényt, akkorreadcsak ritkán van meghívva, akkor felesleges a fenti gyorsítótárazás.Köszi, ez pont azt csinálja,