NodeJS异步回调没有成功?

时间:2015-02-01 10:39:04

标签: javascript node.js asynchronous

我尝试使用async.map功能实现一个scraper迭代一个数组,做一些逻辑然后将它们映射到不同的值。

async.map($('.listing tr').toArray(), GetLink, function(err, results) {
    if (err) throw err;
    console.log(results);
});

它使用cheerio模块循环遍历所有表行以获取它们的链接,然后在它们上完成一些逻辑(从它链接的页面获取信息)。

var GetLink = function(tablerow, callback) {
    var nameElement = $(tablerow).children().first().find('a');
    var link = nameElement.attr('href');

然后我使用' got'模块(更快/更准确的请求版本)来获取页面html。

    got(link, function(error, html, resp) {
        if (!error)
            callback(null, html); // Sends the HTML back as an array result.
    }
}

但是,即使回调是该范围内的有效函数,也不会运行async.map回调[function(err,results)]。

任何信息都将不胜感激。

1 个答案:

答案 0 :(得分:1)

这就是堆栈溢出的方式..你花了很长时间试图自己修复它,一旦你发布了一个问题,你就弄明白了。

问题在于got方法有时会出现错误,这意味着没有运行回调。因此我改变了:

if (!error)
    callback(null, html);

if (!error)
    callback(null, html);
else
    callback(null, null);

如果没有逻辑方法中提供的保证回调,则永远不会运行async.map回调。