我使用此框架制作了几个网址的屏幕截图。获取屏幕截图的过程是异步的,并且该方法不提供执行回调的方法,并且我想在每个屏幕截图在此脚本上进行回调时执行回调:
nightmare = new Nightmare();
urls.forEach(function (url) {
nightmare.goto(url).screenshot(path);
});
nightmare.run(function () {
console.log('finished all');
});
任何想法我该怎么做?
答案 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()
方法,并且如上面的链接所示,允许该方法进行回调存在一些阻力。