image-scraper nodeJS。如何将回调函数发送到结果数组

时间:2017-02-26 22:28:52

标签: javascript node.js web-scraping promise

我尝试构建简易app来构建img-parser并开始使用library image-scraper(node-image-scraper)。并面临一个问题。问题是:我怎样才能获得最终的对象数组

scraper.scrape(function(image) {
        images_list.push(image);
})

承诺 - 没有工作,我试图在函数的参数内发回回来它也没有给我结果。

2 个答案:

答案 0 :(得分:1)

使用scraper.on方法收听end事件。

请注意,您对.scrape(callback)的来电也可以替换为.on('image', callback)

var images = []

scraper.on('image', function (image) {
  images.push(image)
})

scraper.on('end', function () {
  console.log(images)
})

答案 1 :(得分:1)

如果你想要一个承诺,那么scraper#scrape()可以被宣传。

var Scraper = require("image-scraper");

Scraper.prototype.scrapeAsync = function(ms) {
    var ref = this; // same coding style as in existing methods.
    var images = [];
    return new Promise(function(resolve, reject) {
        ref.on('image', (image) => { images.push(image) });
        ref.on('end', () => { resolve(images) });
        // ref.on('error', reject); // unfortunately image-scraper doesn't emit an 'error' event.
        if(ms !== undefined) { // maybe timeout as substitute for error handler?
            setTimeout(() = {
                reject(`image-scraper timed out after ${ms} ms`);
            }, ms);
        }
        ref.scrape();
    });
}

未测试

致电,例如:

const scraper = new Scraper('whatever');

scraper.scrapeAsync(30000).then((images) => {
    // process the `images` array here.
});

修改图像刮刀源以发出"错误"应该相当简单。事件而不是记录错误。您可能需要page_error(致命)和image-error(非致命)的单独事件。

提交拉取请求似乎没什么意义 - 上次更新是2年前。