我正在尝试使用var maxBatchId = findMaxBatchId()
设置变量,但是(我猜是因为回调)返回maxBatchId
时出现了一些问题,我得到了#34; undefined"对于maxBatchId
的值。我试过在很多地方回复maxBatchId
......这可能是回调地狱。
var finalMaxBatchId = findMaxBatchId() //NOT WORKING, is "undefined"
function findMaxBatchId() {
pg.connect(conString,function(err,client,done) {
console.log("Finding the maximum number in Batch Id...");
client.query("SELECT MAX(batch_id) FROM urls;",function(err,result) {
if (err) {
cb(err, null);
return;
}
maxBatchId = result.rows[0].max;
client.end();
return maxBatchId;
});
})
}
答案 0 :(得分:1)
是的,你从回调函数中返回值,该函数从somwhere调用(在返回之前插入console.trace()
以获取图片 - 它的不是部分堆栈of findMaxBatchId call)
findMaxBatchId函数本身没有任何参数,也不返回任何内容。相反,通过你的继续"回调作为参数并将值传递给回调,以便您可以使用它:
function findMaxBatchId(cb) {
pg.connect(conString,function(err,client,done) {
console.log("Finding the maximum number in Batch Id...");
client.query("SELECT MAX(batch_id) FROM urls;",function(err,result) {
if (err) {
cb(err);
return;
}
maxBatchId = result.rows[0].max;
client.end();
cb(null, maxBatchId);
});
})
}
// later where you need max id, instead of "var finalMaxBatchId = findMaxBatchId()"
findMaxBatchId(function(err, finalMaxBatchId) {
if (err) {
// error!!!
return;
}
// max batch id ready to be used
});