Skip to content
Kind of promises implementation for Adobe Scripts
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Simple implementation of Scheduler object, which acts like a Promise object but in Adobe Extend Scripts world.

It makes possible to spawn multiple async processes inside ExtendScript, and run them in determined order.

Implements .done and .then functions

How it works

It's based on app.scheduleTask(). There is no way to acces detached running process started with scheduleTask. Every time app.scheduleTask is called, it creates process in new jsvm. It's Adobe Bridge object, so it have no acces to running script variables, except all the globals. Globals state is shared between all scripts. Scheduler communicates through this space between multiple processes. It invoke and reschedules itself multiple times.

How to use

It can only be used with ExtendScript engine, targeting Adobe After Effects. (Other Adobe products not tested yet) adobe

Include Scheduler object in your file. Use it with global functions, accesible from your main script.


If you have multiple functions, you can invoke then asynchonously, without blocking main thread, but still have controll in order they run.

To run task1 after 100ms after instruction is readed, and then 1000ms after task1 is finished, run task2:

 var f = new Schedule("task1();", 100).done("task2();", 1000);

You also can pass parameters to task and spawn them simualtainesly:

var f = new Schedule("task1(1); ", 100).then("task2(1);", 5000).then("task3(1);", 4000).then("task4(1);", 1000);
var f = new Schedule("task1(2); ", 100).then("task2(2);", 400).done('task3(2)', 10000);

which will produce (see tasks functions definitions in index.js):

_________________1.1 __________________197
_________________1.2 __________________494
_________________2.2 __________________1516
_________________2.1 __________________6269
_________________3.1 __________________10526
_________________3.2 __________________11648
_________________4.1 __________________11747

Note the order of task and milliseconds since starting time.


Process can only be spawned once. Repeating processes itn's supported. Because there is no clear understanding of this behavior at this moment. Keep in mind that Adobe Bridge run-loop isn't very fast, so if you run app.scheduleTask('..', 100, ...); there is no guarantee that process will spavn after 100ms, it will schedule it to execute after 100ms in run-loop, when VM will be available, so this time might increase dramatically, depending of other processes.

This is VERY experimental.

You can’t perform that action at this time.