Это, как представляется, является целью метода run()
. Вы, вероятно, хотите, чтобы настроить и запустить каждый снимок экрана внутри цикла, так как метод screenshot()
основан на методе phandomjs render()
и render()
is strictly synchronous (по крайней мере, из года назад):
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()
метода, и, как показан в приведенной выше ссылке был некоторое сопротивление, позволяющее этому методу принимать обратный вызов.
команда запуска предназначена для использования только один раз, в конце – fernandopasik
Теперь, когда я посмотрел на источник, а не полагаться на примеры, кажется, что вызов работать в цикле, скорее всего, нынешние проблемы. Вы можете решить это, установив новый экземпляр Nightmare для каждого снимка экрана. Кроме того, 'screenshot()' method * делает * принимает второй параметр 'done', который выглядит как обратный вызов, хотя он передает его непосредственно в phantomjs, и я не знаю, что с ним делать. Метод «render()», который он вызывает, является синхронным, поэтому вы будете иметь большое синхронное действие в середине каждой итерации независимо. – Jason
Я обновил свой ответ с материалами, которые я видел в источнике. – Jason