Nodejsとその非同期的な方法ではあまり経験がありません。 私はredisのさまざまなデータベースを照会しようとしています。Nodejs Redis:同じクライアントを持つ異なるRedisデータベースの複数のクエリ
私はRedisのデータベースからキーを取得するために単純な機能を持っている:
function get_key(client, key, db, callback) {
if (key) {
client.select(db, function(e, s) {
if (e) {
console.log('client.select err: ' + e);
} else if (s) {
client.get(key, function(e, s) {
callback(e, s);
return s;
});
}
});
}
return
}
そして、私はこのような複数のデータベースを照会するためにそれを使用しています:
get_key(client, key1, 0, function(e, s) {
if (s) {
// do stuff with s;
} else {
debug('e: ' + e);
}
});
get_key(client, key2, 1, function(e, s) {
if (s) {
// do stuff with s;
} else {
debug('e: ' + e);
}
});
をそれは動作していません。しかし、クエリごとに異なるクライアントを作成しても機能します。私は12以上のデータベースでクエリを持っており、クエリを実行するたびに新しいクライアントを作成することを好まないでしょう。
これを行うより良い方法はありますか?私が慣れていない "ノード"の方法?ありがとうございました。
したがって、get_key()関数では、コールバック関数が呼び出される前に最後のリターンが実行されますか?また、外部モジュールを使用せずにnodejsでこれを行う良い方法はありませんか?はい、私は作るためにたくさんの呼び出しがあり、私は好ましくは他のライブラリ/モジュールを使いたくないでしょう。 nodejにはこれをきれいにする方法がありませんか? – anshulv
これは 'if(key)start select request and returnのようなものです。応答が返ってきたら選択を続け、結果と一緒にコールバックを呼び出します。アイデアは、I/O操作が完了するのを待つNodeの単一スレッドをブロックしないことです。ライブラリを使わずにコールバックの中にたくさんのコールバックを入れることができますが、コードは巨大な角括弧のようになります。ライブラリは読みやすさを向上させ、構造を提供し、nodejs固有のものではないため、例えばブラウザのjavascriptでも約束されています。 – leetibbett
ええ、私はnodejsについてほとんど理解していないので、可読性を向上させるためだけに別の外部フレームワークを使用するほうが賢明ではありません。おそらく標準的なlibrarayには含まれていないのではないかと思います。とにかくありがとうございました。私は先に進んで、node-asyncを使ってみましょう。 – anshulv