- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Mobil flották
- Redmi Note 13 Pro+ - a fejlődés íve
- Nothing Phone (3) – tervezett kaotika
- iPhone topik
- Bemutatkozott a Poco X7 és X7 Pro
- Samsung Galaxy A53 5G - kevesebbet többért
- Hivatalos a OnePlus 13 startdátuma
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Jim-Y
veterán
Sziasztok.
Promise-os kérdésem lenne. Arra lennék kváncsi, hogy hogyan lenne szerintetek érdemes használni, vagy hogy elegáns használni a promise-okat. Adott a következő szituáció:
- van egy REST service:
server.get( '/get/articles', getArticles );
- van azt ezt feldolgozó getArticles függvény
- illetve van egy articleProvider osztály/modul amit a getArticles függvényből hívok meg. Ponstosabban annak findAll metódusát. Ez felelős az adatbázisból való kiolvasásértA kérdés, hogy a getArticles / findAll függvényt hogy kéne megrni, több (működő) verzió is született már, de nem tudom eldönteni, hogy melyik a szép/jó/használható megoldás.
Megoldás 1, ez született legkésőbb, szerintem ez a legjobb:
function getArticles( req, res, next ) {
var promise = new mongoose.Promise;
promise.onResolve(function( err, articles ) {
if( err ) {
console.error( err );
res.send("Could not read articles");
}
res.send( articles );
});
articleProvider.findAll( promise );
}ArticleProvider.prototype.findAll = function( promise ) {
this.Article.find({}, function ( err, articles ) {
if( err ) {
promise.reject(new Error( err ));
}
promise.fulfill( articles );
});
}Megoldás 2:
function getArticles( req, res, next ) {
articleProvider.findAll().fulfill(res);
//articleProvider.findAll()
.reject(new Error("Valamiért rejecteljük"));
}ArticleProvider.prototype.findAll = function() {
var promise = new Promise,
self = this;
promise.onResolve(function( err, res ) {
if( err ) {
console.error( err );
}
self.Article.find({}, function( err, articles ) {
if( err ) {
promise.reject(new Error( err ));
}
res.send( articles );
});
});
return promise;
};Ez a reject-re amúgy sem működik jól, mert a res-t nem tudjuk átadni.
Megoldás 3:
Ez jó, illetve kompakt, de igy meg nem tudjuk rejectelni ha kéne.
function getArticles( req, res, next ) {
var promise = articleProvider.findAll();
promise.onResolve(function( err, articles ) {
if( err ) {
res.send(new Error( err ));
}
res.send( articles );
});
}ArticleProvider.prototype.findAll = function() {
return this.Article.find().exec();
};stb, még tudnék pár verziót összerni
Vélemények?
Üdv, és köszi. Remélem érthető a példakód ^^
megj: mindhárom megoldás működik egyébként.
Új hozzászólás Aktív témák
- Hardcore pizza és kenyér topik
- Milyen légkondit a lakásba?
- Microsoft Office és Office 365 topic
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- ASUS routerek
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Navi Radeon™ RX 6xxx sorozat
- Call of Duty: Black Ops 6
- Autós topik
- Építő/felújító topik
- További aktív témák...
- DJI AVATA 2 Fly More Combo drón - 3 akku, garancia, FPV RC 3, sok tartozék
- szinte új iPhone 16 Plus 128GB white fehér független Apple 3 év garancia ajándék
- Samsung Galaxy A32 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Újszerű Karcmentes Samsung Galaxy S24 8/128GB 2028.05.19-ig garanciával
- 16 db Intel Celeron és Celeron D processzor
- PS Plus előfizetések
- Dymo LabelWriter 400 hőpapíros címkenyomtató
- LG 27GR95QL - 27" OLED / Limitált LoL Edition / QHD 2K / 240Hz & 0.03ms / NVIDIA G-Sync / FreeSync
- AKCIÓ! ASUS H81M-PLUS H81 chipset alaplap garanciával hibátlan működéssel
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 3050 6GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: FOTC
Város: Budapest