2

我只是启动节点并尝试习惯异步行为,但是在渲染视图时分配值时遇到问题。代码库非常简单:

在自定义模块中:

var fs = require('fs')

exports.drawCard = function (color, callback) {
  fs.readFile(color, 'utf-8', function(err, data) {
    if (err) { callback(err); return }
    var card = sample(data.split(/\n/))
    callback(err, card)
  })
}

在路由文件中:

exports.index = function(req, res){
  var deck = require('./../deck.js')

  console.log(newCard)
  res.render('index', { 
    title: 'Bits AH',
    //This is what I would like
    card: deck.drawCard("green")
  })
};

我知道这不是您分配变量的方式,但这是我所追求的总体思路。我无法弄清楚仅执行此简单分配的代码/节点方式

4

1 回答 1

2

这就是你想要的吗?

exports.index = function(req, res){
  var deck = require('./../deck'); // No .js required

  deck.drawCard(function(err, card) {
    if(err) {
      res.render('error');
      return;
    }

    res.render('index', { 
      title: 'Bits AH',
      card: card
    });
  });
};

您将 res.render 调用包装在 drawCard 函数的回调中,因为直到函数完成后才能返回。但是,可以在模块初始化时加载这些文件,然后您可以将 drawCard 函数转换为同步的,然后您可以像在示例中一样使用它。

于 2013-08-11T03:30:07.567 回答