0

node.jsとexpress.jsは初めてです。これは少しばかげていることは知っていますが、この問題を解決する方法が本当にわかりません。誰かが私を助けてくれることを願っています。

Redisにいくつかの情報が保存されています。

redis 127.0.0.1:6379> hgetall "store1"
1) "apple"
2) "10"
3) "banana"
4) "15"
5) "pear"
6) "20"
7) "name"
8) "A Street"
redis 127.0.0.1:6379> hgetall "store2"
1) "apple"
2) "30"
3) "banana"
4) "40"
5) "pear"
6) "50"
7) "name"
8) "B Street"

これらの情報を表に表示したいと思います。express.jsを使用して、次のルートファイルを作成しました。

ルート/レポート.js

var redis = require('redis'),
    redisclient = redis.createClient();

exports.index = function(req, res){
  redisclient.on("error", function (err) {
      console.log("Error " + err);
  });

  var reports = [];
  redisclient.keys("*", function(err, stores) {
    for (var store in stores) {
      redisclient.hgetall(store, function(err, figures) {
        reports.push(figures);
      });
    }
  });

  res.render('report', { title: 'Store Report', reports: reports });
};

また、次のjadeビューファイル。

views / report.jade

h1= title
table(class="table table-striped table-condensed")
  thead
    tr
      th store
      th apple
      th banana
      th pear

  tbody
  - each report in reports
    !=partial('partials/record', {store:record.name, apple:record.apple, banana:record.banana, pear:record.pear})

ビュー/partials/record.jade

tr
  td= store
  td= apple
  td= banana
  td= pear

を開くlocalhost:3000/reportと、コンテンツのないテーブル構造が表示されます。

redis呼び出しが非同期であることを理解しています。beforeredisreport.jsでレンダリングされたファイルは結果を返します。report.jade

この問題を解決するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

非同期モジュールを使用して、すべてのIO操作が完了したときにコールバックを実行して結果をレンダリングしてみてください。

非同期READMEのコード例:

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);
于 2012-05-21T04:12:25.147 に答える