Jestem po prostu ciekawa, jak CasperJS obsługuje zdarzenia związane ze stosem wywołań.Czy CasperJs następnie() czeka na emitowane zdarzenia w poprzedniej funkcji?
powiedzmy mamy pewne kod:
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();
wiem, że wtedy() będzie czekać sprawdzić przed 3 flags: pendingWait, loadInProgress i navigationRequested. Wydrukowanie stosu wywołań pokazuje wywołanie emitujące, które ma być funkcją start(), więc start() nie zostanie uznany za zakończony, dopóki zdarzenie się nie zakończy? To znaczy. następnie() czekać, aż zdarzenie zakończy
testowałem to z czekać 60 sekund, a ja dostawałem wyjście:
start
foo
done
Choć nie byłem pewien, czy przekroczenie określonego czasu by wyzwolić Potem().
Bardzo dokładny, dzięki za odpowiedź! Jeśli zastąpiłem instrukcję wait inną nieynynową logiką, która zajęła trochę czasu, czy nadal powinienem oczekiwać tego samego wyjścia? Z mojego rozumienia, oddzwanianie początkowe kończy się po zakończeniu ostatniego niezasynchronizowanego zapisu (nawet jeśli to stwierdzenie jest w jakimś przypadku), a następnie() nie zostanie wykonane przed tym punktem. –
Twoja obserwacja jest prawidłowa, a wynik będzie taki sam, ale czasy będą inne, ponieważ teraz blokowanie oczekiwania następuje przed 'this.echo ('foo');' –