等待异步调用

时间:2015-01-06 18:54:12

标签: node.js

我需要获取HTML页面的标题,我正在使用node-metainspector

我创建了一个模块:

var MetaInspector = require('node-metainspector');

exports.getTitle = function(url) {
  var fullUrl = "http://" + url;
  var inspector = new MetaInspector(fullUrl, {});
  var title = '';

  inspector.on('fetch', function() {
    title = inspector.title;
    console.log(title);
    return title;
  });

  inspector.on('error', function(error) {
    console.log(error);
  });

  inspector.fetch();
}

在我的快递申请中使用它:

exports.add = function(req, res) {
  var url = req.body.url;
  console.log(url);
  console.log(parser.getTitle(url));
}

此代码无法正常运行。第console.log(parser.getTitle(url));行返回undefined。 我认为原因是JS的异步性质。 getTitle()完成后调用inspector.on('fetch')。但我是node.js的新手,我不知道解决这个问题的好方法是什么。

1 个答案:

答案 0 :(得分:2)

您应该通过添加回调参数将getTitle转换为异步函数:

exports.getTitle = function(url, cb) {

  // ...

  inspector.on('fetch', function() {
    title = inspector.title;
    cb(null, title);
  });

  inspector.on('error', function(error) {
    cb(error);
  });
}

...然后这样称呼:

foo.getTitle(src, function(err, title) {
  if (err) { /* handle error */ }
  // Handle title
});