Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
custom:javascript:callbacks [2021/04/04 20:43] – [Callback API] More clarity for the Listener stuff. Deuce | custom:javascript:callbacks [2021/04/04 22:35] – Add more details to the event loop Deuce | ||
---|---|---|---|
Line 9: | Line 9: | ||
**polled callbacks**\\ | **polled callbacks**\\ | ||
- | polled callbacks are those that will be called | + | polled callbacks are those that will be invoked |
**timer callbacks**\\ timer callbacks are invoked after a defined period of time. | **timer callbacks**\\ timer callbacks are invoked after a defined period of time. | ||
Line 89: | Line 89: | ||
The event loops is ran after the script finishes executing while js.do_callbacks is set and there are either timer or polled callbacks installed, or there are any items in the run queue. | The event loops is ran after the script finishes executing while js.do_callbacks is set and there are either timer or polled callbacks installed, or there are any items in the run queue. | ||
+ | |||
+ | Note that since polled callbacks are triggered based on current state, only one will be triggered for each such state. | ||
Basically: | Basically: | ||
<code javascript> | <code javascript> | ||
while (js.do_callbacks && (timer_callback_count > 0 || polled_callback_count > 0 || run_queue.length > 0)) { | while (js.do_callbacks && (timer_callback_count > 0 || polled_callback_count > 0 || run_queue.length > 0)) { | ||
- | if (polled_callback_ready) { | + | |
+ | | ||
+ | timeout = 0; | ||
+ | poll_result = poll_callback_states(timeout); | ||
+ | if (poll_result.polled_callback_ready) { | ||
polled_callback.call(thisObj); | polled_callback.call(thisObj); | ||
continue; | continue; | ||
} | } | ||
- | if (timed_callback_ready) { | + | if (poll_result.timed_callback_ready) { |
timed_callback.call(thisObj); | timed_callback.call(thisObj); | ||
continue; | continue; | ||
} | } | ||
- | if (run_queue.length > 0) { | + | if (poll_result.run_queue.length > 0) { |
run_queue.shift().call(thisObj); | run_queue.shift().call(thisObj); | ||
continue; | continue; |