Usted dice que los archivos 2/3 tienen "mismo contenido", pero no están en un área crítica. Según la documentación de Bluebird para promisifyAll
(ver http://bluebirdjs.com/docs/api/promise.promisifyall.html), esta función crea un ...Async
versión de cada función principal en el cliente de Redis. Llamas a hmgetAsync
en tu primer caso, pero solo llamas a hmget
en tus otros.
Esto es importante porque está utilizando un patrón asíncrono pero con una estructura de código no asíncrona. En el archivo 2/3 configuras result1
dentro de una devolución de llamada asíncrona, pero luego devuélvela debajo de cada llamada antes de que la llamada pudiera haber regresado.
Tienes dos opciones:
1:puede convertir file2/3/etc a un patrón totalmente tradicional pasando una devolución de llamada además del cliente redis:
module.exports = function(redisclient, callback){
En lugar de devolver result1
, entonces llamarías a la devolución de llamada con este valor:
if(redisValue == 'test value'){
callback(null, "success");
} else {
callback("failed", null);
}
2:Puede convertir el archivo 2/3/..N para que esté basado en Promise, en cuyo caso no necesita promisifyAll(require(...))
ellos - simplemente puede require()
a ellos. Tal patrón podría verse así:
module.exports = function(redisclient){
return redisclient.hmgetAsync("testdata", "text1");
};
Esta es una opción mucho más simple y limpia, y si continúa con ella, puede ver que probablemente incluso podría eliminar el require() y simplemente hacer hmgetAsync
en el archivo 1 con los datos apropiados devueltos por Cassandra. Pero es difícil saberlo sin ver las necesidades específicas de su aplicación. En cualquier caso, los patrones basados en Promise son generalmente mucho más breves y limpios, pero no siempre mejores:HAY una sobrecarga de rendimiento moderada para usarlos. Tú decides qué camino tomar; cualquiera de los dos funcionará.