Du siger, at fil2/3 er "samme indhold", men de er ikke i et kritisk område. Per Bluebirds dokumentation for promisifyAll
(se http://bluebirdjs.com/docs/api/promise.promisifyall.html), denne funktion opretter en ...Async
version af hver kernefunktion i Redis-klienten. Du kalder hmgetAsync
i dit første tilfælde, men du ringer kun til hmget
i dine andre.
Dette er vigtigt, fordi du bruger et asynkront mønster, men med en ikke-asynkron kodestruktur. I fil2/3 indstiller du result1
inde i et asynkront tilbagekald, men returner det derefter under hvert opkald, før opkaldet muligvis kunne være vendt tilbage.
Du har to valgmuligheder:
1:Du kan konvertere fil2/3/etc til et fuldt traditionelt mønster ved at sende et tilbagekald ud over redis-klienten:
module.exports = function(redisclient, callback){
I stedet for at returnere result1
, vil du så ringe tilbagekaldet med denne værdi:
if(redisValue == 'test value'){
callback(null, "success");
} else {
callback("failed", null);
}
2:Du kan konvertere file2/3/..N til at være Promise-baseret, i hvilket tilfælde du ikke behøver at promisifyAll(require(...))
dem - du kan simpelthen require()
dem. Sådan et mønster kan se sådan ud:
module.exports = function(redisclient){
return redisclient.hmgetAsync("testdata", "text1");
};
Dette er en meget enklere og renere mulighed, og hvis du fortsætter med det, kan du se, at du sandsynligvis endda kunne eliminere require() og blot udføre hmgetAsync
i fil1 med passende data returneret af Cassandra. Men det er svært at vide uden at se dine specifikke applikationsbehov. Under alle omstændigheder er Promise-baserede mønstre generelt meget kortere og renere, men ikke altid bedre - der ER en moderat ydeevne for at bruge dem. Det er dit opkald, hvilken vej du går - begge dele vil virke.