Du säger att fil2/3 är "samma innehåll" men de är inte i ett kritiskt område. Per Bluebirds dokumentation för promisifyAll
(se http://bluebirdjs.com/docs/api/promise.promisifyall.html), den här funktionen skapar en ...Async
version av varje kärnfunktion i Redis-klienten. Du anropar hmgetAsync
i ditt första fall, men du anropar bara hmget
i dina andra.
Detta är viktigt eftersom du använder ett asynkront mönster men med en icke-asynkron kodstruktur. I fil2/3 ställer du in result1
i ett asynkront återuppringning, men returnera det sedan under varje samtal innan samtalet möjligen kunde ha återvänt.
Du har två val:
1:Du kan konvertera fil2/3/etc till ett helt traditionellt mönster genom att skicka in en återuppringning utöver redis-klienten:
module.exports = function(redisclient, callback){
Istället för att returnera result1
, skulle du sedan ringa upp återuppringningen med detta värde:
if(redisValue == 'test value'){
callback(null, "success");
} else {
callback("failed", null);
}
2:Du kan konvertera file2/3/..N till Promise-based, i så fall behöver du inte promisifyAll(require(...))
dem - du kan helt enkelt require()
dem. Ett sådant mönster kan se ut så här:
module.exports = function(redisclient){
return redisclient.hmgetAsync("testdata", "text1");
};
Detta är ett mycket enklare och renare alternativ, och om du fortsätter med det kan du se att du förmodligen till och med kan eliminera require() och helt enkelt göra hmgetAsync
i fil1 med lämplig data som returneras av Cassandra. Men det är svårt att veta utan att se dina specifika applikationsbehov. I vilket fall som helst är löftesbaserade mönster i allmänhet mycket kortare och renare, men inte alltid bättre - det ÄR en måttlig prestanda omkostnad för att använda dem. Det är ditt samtal vilken väg du går - båda kommer att fungera.