Я пытаюсь понять, как взаимодействуют кошмар и во. Пожалуйста, найдите ниже (почти) оригинальный пример страницы кошмара.
Может ли кто-нибудь дать мне подсказку, как узнать последовательность происходящих событий, т.е.
- почему функции генератора нужны операторы yield и return для работы кода
- как выходы автоматически запускаются vo/кошмаром, чтобы последовательность работала разумно. Предыстория: я хотел бы знать, когда и где размещать yields, однако операторы yield здесь, похоже, не делают ничего другого, кроме как фактически вызывают ожидание. С моими текущими знаниями я могу просто скопировать пример и "ждать" при вызове ".goto()" и ".end()".
К сожалению, кошмарная документация не говорит, как работает его дизайн (взаимодействие с промисами и генераторами).
Если кто-нибудь может придумать пример того, как вручную разрешить обещание run() и запустить все .next(), которые необходимы для того, чтобы функция генератора работала должным образом, это уже было бы большой помощью.
var Nightmare = require('nightmare');
var vo = require('vo');
vo( run() )(function(err, result) {
if (err) throw err;
console.log("end result length: ", result.length);
});
function *run() {
var x = Date.now();
var nightmare = Nightmare();
var html = yield nightmare
.goto('http://google.com')
.evaluate(function() {
return document.getElementsByTagName('html')[0].innerHTML;
});
console.log("done in " + (Date.now()-x) + "ms");
console.log("result:", html.length);
yield nightmare.end();
return html;
}
Спасибо !
var nm = new run(); var result1Promise = nm.next().value.then(function(result1) { var result2Promise = nm.next(result1).value.then(function(result2) { nm.next(result2); }); });
. Однако мне непонятно, почему результаты урожайности должны передаваться обратно в генераторы вручную. - person Martin Nigsch   schedule 19.01.2016