私は小さな Node.js アプリを作成しています。実行する必要があることの 1 つは、Redis データストア内のすべてのデータを取得して、この特定のページに表示することです。これまでのところ、私のコードは次のようになります。
exports.view = function (req, res) {
rclient.keys('*', function (err, reply) {
var data = {};
// Get the value for each key
for (var i = 0; i < reply.length; i++) {
rclient.GET(reply[i], function (err, value) {
data[reply[i]] = value;
});
}
res.render('view', {title: 'Datastore', data: data});
});
};
ここには少なくとも 2 つの問題があります。1: Node.js の非同期性のため、データ変数をレンダー関数に渡すと空になります。これを回避する適切な方法は何ですか?
2: 変数 i はコールバックの期待値と等しくありません。これは、ループがインクリメントされているためです。また、スコープにより、最初の反復のコールバックが呼び出されるまでに i は 1 になります (0 になるはずです)。
私は Node.js にかなり慣れていないので、何か間違っていると確信しています。