-
Fototrend
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
- Robotporszívók
- Samsung Galaxy Felhasználók OFF topicja
- Bluetooth hangszórók
- Luck Dragon: Asszociációs játék. :)
- 5.1, 7.1 és gamer fejhallgatók
- Xbox tulajok OFF topicja
- Témázgatunk, témázgatunk!? ... avagy mutasd az Android homescreened!
- Cyberpunk 2077
- World of Warships
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- Megkímélt HP EliteBook 855 G7 Fémházas Strapabíró Laptop 15,6" -65% AMD Ryzen 3 PRO 4450U 16/256 FHD
- DDR5 Gamer PC - i5 14400f, RTX 3070 Ti, 1 TB SSD, Z 790-S Wifi
- Ryzen esportpc(ryzen3 -4100/RX580-8gb/SSD/hdd)
- Prémium! Gamer PC-Számítógép! Csere-Beszámítás! Rog C VIII / R9 3950X / RTX 3080 / 1TB SSD / 32GB
- Samsung galaxy watch 7 44mm (ezüst) + 1.5 év garancia
- Azonnali készpénzes AMD Ryzen 1xxx 2xxx 3xxx 5xxx processzor felvásárlás személyesen / csomagküldés
- Samsung Galaxy S24 Ultra 12/256 GB Titanium Gray 6 hónap Garancia Beszámítás Házhozszállítás
- Apple iPhone 13 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! Lenovo Thinkpad L14 Gen 1 notebook - i5 10210U 16GB DDR4 512GB SSD Intel UHD GraphicsW11
- HIBÁTLAN iPhone 15 Pro 128GB Black Titanium-1 ÉV GARANCIA - Kártyafüggetlen, MS4660
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

