file2 / 3は「同じコンテンツ」であるとあなたは言いますが、それらは1つの重要な領域にありません。 promisifyAll
に関するBluebirdのドキュメントによる (http://bluebirdjs.com/docs/api/promise.promisifyall.htmlを参照)、この機能は...Async
を作成します Redisクライアントの各コア機能のバージョン。 hmgetAsync
を呼び出します 最初のケースでは、hmget
のみを呼び出します あなたの他の人に。
非同期パターンを使用しているが、非同期コード構造を使用しているため、これは重要です。 file2 / 3で、result1
を設定します 非同期コールバック内にありますが、呼び出しが返される前に、各呼び出しの下に返します。
2つの選択肢があります:
1:redisクライアントに加えてコールバックを渡すことで、file2 / 3 / etcを完全に従来のパターンに変換できます:
module.exports = function(redisclient, callback){
result1
を返す代わりに 、次に、次の値を使用してコールバックを呼び出します:
if(redisValue == 'test value'){
callback(null, "success");
} else {
callback("failed", null);
}
2:file2 / 3 / .. NをPromiseベースに変換できます。その場合、promisifyAll(require(...))
を実行する必要はありません。 それら-あなたは単にrequire()
することができます 彼ら。このようなパターンは次のようになります:
module.exports = function(redisclient){
return redisclient.hmgetAsync("testdata", "text1");
};
これははるかにシンプルでクリーンなオプションです。これを続ければ、require()を削除して、hmgetAsync
を実行することもできます。 ファイル1に、Cassandraから返された適切なデータが含まれています。しかし、特定のアプリケーションのニーズを見ずに知ることは困難です。いずれにせよ、Promiseベースのパターンは一般的にはるかに短く、クリーンですが、常に優れているとは限りません。それらを使用するためのパフォーマンスのオーバーヘッドは中程度です。どちらに行くかはあなたの電話です-どちらでもうまくいきます。