Você diz que file2/3 são "mesmo conteúdo", mas não estão em uma área crítica. De acordo com a documentação do Bluebird para
promisifyAll
(consulte http://bluebirdjs.com/docs/api/promise.promisifyall.html), esse recurso cria um ...Async
versão de cada função principal no cliente Redis. Você chama hmgetAsync
no seu primeiro caso, mas você só chama hmget
em seus outros. Isso é importante porque você está usando um padrão assíncrono, mas com uma estrutura de código não assíncrona. Em file2/3 você define
result1
dentro de um retorno de chamada assíncrono, mas, em seguida, retorne-o abaixo de cada chamada antes que a chamada possa ter retornado. Você tem duas opções:
1:Você pode converter file2/3/etc para um padrão totalmente tradicional passando um callback além do cliente redis:
module.exports = function(redisclient, callback){
Em vez de retornar
result1
, você chamaria o retorno de chamada com este valor:if(redisValue == 'test value'){
callback(null, "success");
} else {
callback("failed", null);
}
2:Você pode converter file2/3/..N para ser baseado em Promise, nesse caso você não precisa
promisifyAll(require(...))
eles - você pode simplesmente require()
eles. Esse padrão pode se parecer com:module.exports = function(redisclient){
return redisclient.hmgetAsync("testdata", "text1");
};
Esta é uma opção muito mais simples e limpa, e se você continuar com ela, poderá ver que provavelmente poderia até eliminar o require() e simplesmente fazer o
hmgetAsync
no arquivo1 com os dados apropriados retornados pelo Cassandra. Mas é difícil saber sem ver suas necessidades específicas de aplicação. De qualquer forma, os padrões baseados em Promise são geralmente muito mais curtos e limpos, mas nem sempre melhores - há uma sobrecarga de desempenho moderada para usá-los. É sua escolha o caminho que você vai - qualquer um funcionará.