javascript - NodeJS 异步回调未成功?

标签 javascript node.js asynchronous

我正在尝试使用 async.map 功能来实现一个抓取器,以迭代数组,执行一些逻辑,然后将它们映射到不同的值。

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)] 也永远不会运行。

如有任何信息,我们将不胜感激。

最佳答案

这就是堆栈溢出的方式。您花了很长时间尝试自己修复它,一旦您发布问题,您就会弄清楚。

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

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

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

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

关于javascript - NodeJS 异步回调未成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261780/

相关文章:

javascript - React Hooks 中根据父组件的不同变化来更改子组件的不同 props?

javascript - Three.js OBJ 加载器不能在 codepen 上工作?

javascript - 嵌套的 forEach 循环存在异步问题,每次以不同的速率完成

ios - 如何在ios中异步下载图片?

javascript - 如何将 Node.js 环境变量注入(inject)客户端 JavaScript?

javascript - 如何在 Meteor 方法中的函数中获取 this.userId

javascript - 在 mongoDB/Mongoose 上使用查找和聚合来获取数据

node.js - Nodejs : websocket routing based on URL without port proxying

javascript - Node Js 在生产中不写入日志文件

c# - 从目录获取文件的异步函数未按预期工作