我只是好奇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
雖然我不知道,如果超過一定的超時將觸發然後()。
非常徹底,謝謝你的迴應!如果我用一些花費一些時間的非異步邏輯取代了等待語句,我是否仍然期望相同的輸出?根據我的理解,一旦最後一個非異步狀態結束(即使該語句在某些情況下),開始回調就會結束,然後()不會在該點之前執行。 –
你的觀察是正確的,輸出將是相同的,但時間會有所不同,因爲現在阻塞的等待在'this.echo('foo')之前;'' –