- Samsung Galaxy A54 - türelemjáték
- Milliókkal olcsóbb a Model Y Standard Magyarországon
- Fotók, videók mobillal
- iPhone topik
- Xiaomi 15 - kicsi telefon nagy energiával
- Motorola ThinkPhone - gondold végig kétszer!
- Nothing Phone 2a - semmi nem drága
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Samsung Galaxy S25 FE - fenséges, felejthető vagy felesleges?
Hirdetés
(használd a CYBSEC25PH kuponkódot további 20 ezer ft kedvezményért!)
-
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
- Új Dobozos PcCom Revolt Gamer Tervező Vágó laptop -65% 15,6" i7-13700H 32/1TB RTX4060 8GB FHD 144Hz
- Új Zsír Dell Inspiron 14 7441 Érintős Ultrabook Laptop -25% Snapdragon X Plus 10Mag 16/1TB SSD QHD+
- Csere-Beszámítás! DDR5 Gamer Notebook! Rog Strix G513RC / R7 6800HS / RTX 3050 / 16GB DDR5 / 512 SSD
- HP ProDesk 600 G4 DM Mini PC, I5-8600T, 8GB DDR4, 256GB NVMe SSD, Wifi, Bluetooth, Win 11, Számla, 2
- HP ProBook 450 G7, 15,6" FHD IPS, I5-10210U, 8GB DDR4, 256GB SSD, W11, Számla, 1 év garancia ( olvas
- Samsung Galaxy Z Fold6 Navy Duplakijelzős produktivitás, 120 Hz, Galaxy AI,2027. 09. 19
- 150 - Lenovo LOQ (15IAX9) - Intel Core i5-12450HX, RTX 4060 (ELKELT)
- MSI CreatorPro Z16P RTX A5500 TOUCH! (vapor chamberrel)
- Seagate Exos X18 16TB SAS merevlemez
- GYÖNYÖRŰ iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA -Kártyafüggetlen, MS3604
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest