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