Мне просто интересно, как CasperJS обрабатывает события в отношении стека вызовов.Запускает ли CasperJs() ожидание событий в предыдущей функции?
Скажем, у нас есть некоторый код:
casper.on('foo', function() {
this.wait(60000);
this.echo('foo');
});
casper.start('http://www.stackoverflow.com', function() {
this.echo('start');
this.emit('foo');
});
casper.then(function() {
this.echo('done');
});
casper.run();
Я знаю, что тогда() будет ждать сверять 3 flags: pendingWait, loadInProgress и navigationRequested. Распечатка стека вызовов показывает, что вызов emit находится в функции start(), поэтому start() не считается завершенным до окончания события? То есть будет() ждать, пока событие не закончится
Я испытал это с ожиданием 60 секунд, и я получил выход:
start
foo
done
Хотя я не был уверен, что при превышении определенного времени будет приводить в затем then().
Очень тщательный, спасибо за ответ! Если я заменил оператор wait какой-то неасинхронной логикой, которая заняла некоторое время, должен ли я ожидать такой же вывод? По моему мнению, начальный обратный вызов заканчивается после завершения последнего неасинхронного состояния (даже если этот оператор находится в некотором случае), а затем() не будет выполняться до этой точки. –
Ваше наблюдение верное, и вывод будет одинаков, но тайминги будут разными, так как теперь блокируемое ожидание до 'this.echo ('foo');' –