@zedux/atoms
Version:
A Molecular State Engine for React
72 lines (71 loc) • 2.5 kB
TypeScript
import { Job, Scheduler as SchedulerInterface } from '@zedux/core';
import { Ecosystem } from './Ecosystem';
export declare class Scheduler implements SchedulerInterface {
private readonly ecosystem;
/**
* We set this to true internally when the scheduler starts flushing. We also
* set it to true when batching updates, to prevent anything from flushing.
*/
_isRunning?: boolean;
_isRunningNows?: boolean;
/**
* The dynamic list of "full" jobs to run. Full jobs are:
*
* - EvaluateGraphNode (2)
* - UpdateExternalDependent (3)
* - RunEffect (4)
*/
private jobs;
/**
* The dynamic list of "now" jobs to run. Now jobs are:
*
* - UpdateStore (0)
* - InformSubscribers(1)
*/
private nows;
private _handle?;
private _runAfterNows?;
constructor(ecosystem: Ecosystem);
/**
* Kill any current timeout and run all jobs immediately.
*
* IMPORTANT: Setting and clearing timeouts is expensive. We need to always
* pass `shouldSetTimeout: false` to scheduler.schedule() when we're going
* to immediately flush
*/
flush(): void;
/**
* Insert a job into the queue. Insertion point depends on job's type and
* weight.
*
* IMPORTANT: Setting and clearing timeouts is expensive. We need to always
* pass `shouldSetTimeout: false` when we're going to immediately flush
*/
schedule(newJob: Job, shouldSetTimeout?: boolean): void;
/**
* UpdateStore (0) jobs must run immediately but also need the scheduler to be
* running all "now" jobs.
*
* InformSubscriber (1) jobs must run immediately after the current task.
*/
scheduleNow(newJob: Job): void;
unschedule(task: () => void): void;
wipe(): void;
private findIndex;
/**
* Schedule an EvaluateGraphNode (2) or UpdateExternalDependent (3) job
*/
private insertJob;
/**
* Run either all "full" jobs or all "now" jobs. Since the jobs are split, we
* can essentially have two schedulers running at once. "Now" jobs must always
* run before any "full" jobs, so the "full" jobs runner has to flush any
* "now"s that come up while it's flushing "full"s.
*
* Don't run "full" jobs while "now"s are running. It leads to "now"s being
* deferred until after "full"s finish. This is backwards and can lead to
* reevaluation loops.
*/
private runJobs;
private setTimeout;
}