节点:处理异步性质

时间:2011-12-19 16:21:59

标签: node.js

这让我陷入了一个循环;我不完全确定如何解决这个问题。我有一个具有多个属性的对象,这些属性从数据库中获取并写入数据库。一个例子可能是:

// This is an over simplified example. this._connection() returns a valid DB connection
var delay = {
  'time' : function() {
    this._connection().query('SELECT * FROM delay', function(err, result, fields) {
      return result.length ? result[0].time : 60;
    }
  }
}

现在,如果我尝试使用此代码....

console.log('Current Delay:' + delay.time());

正如我预期的那样打印'undefined',因为mySQL回调在方法delay()返回之前没有执行,因此回调中的return没有做任何事情。

是否有可接受的方法来处理这类事情?也许我只是无法绕过node.js / async。

1 个答案:

答案 0 :(得分:2)

它被称为回调

var delay = {
  'time' : function(data, cb) {
    this._connection().query('SELECT * FROM delay', function(err, result, fields) {
      if (err) {
        // return early to avoid else
        return cb(err);
      }
      cb(null, result.length ? result[0].time : 60);
    }
  }
}

delay.time(null, function (err, time) {
  console.log('Current Delay:' + time);
});

请注意,内部函数中的return语句是无用的。 return并没有神奇地传播在外部函数上调用return。那是因为函数在它们的末尾有一个实现return undefined;