NightmareJS截图回调

时间:2014-10-16 17:13:00

标签: node.js phantomjs nightmare

我使用此框架制作了几个网址的屏幕截图。获取屏幕截图的过程是异步的,并且该方法不提供执行回调的方法,并且我想在每个屏幕截图在此脚本上进行回调时执行回调:

nightmare = new Nightmare();
urls.forEach(function (url) {
    nightmare.goto(url).screenshot(path);
});

nightmare.run(function () {
  console.log('finished all');
});

任何想法我该怎么做?

2 个答案:

答案 0 :(得分:3)

我找到了一种方法,用"使用"执行插件的方法。

nightmare = new Nightmare();
urls.forEach(function (url) {
    nightmare.goto(url).screenshot(path).use(function () {
        console.log('finished one');
    });
});

nightmare.run(function () {
    console.log('finished all');
});

答案 1 :(得分:2)

这似乎是run()方法的目的。您可能希望在循环中设置并运行每个屏幕截图,因为screenshot()方法依赖于phandomjs方法render()render() is strictly synchronous(至少在一年前):< / p>

urls.forEach(function (url) {
    nightmare = new Nightmare();
    nightmare.goto(url).screenshot(path).run(function(err, nightmare) {
        console.log('this executes when your screenshot completes');
        // run() appropriately tears down the nightmare instance
    });
});

console.log('finished all');

您不会立即通过设置所有屏幕截图获得任何异步优势,并且只有在渲染完所有屏幕截图后才能保证“全部完成”。

或者,在nightmarejs源代码中,screenshot() 看起来像第二个done参数似乎是一个回调,但是它将它直接传递给了phantomjs render()方法,并且如上面的链接所示,允许该方法进行回调存在一些阻力。