使用带有nodejs的return来获取值

时间:2014-10-28 20:39:08

标签: node.js callback

我正在尝试使用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;
    });
  })
}

1 个答案:

答案 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
});