gj
Описание
gj предоставляет интерфейс для компиляции исходного gj-кода в обычный JavaScript-код.
gj-код представляет собой обычный JavaScript-код с несколькими улучшениями:
- Код может разделяться на несколько шагов, каждый из которых выполняет определенное асинхронное действие и передает управление следующему шагу.
- В gj-коде доступны несколько инструкций, которые заменяются актуальными значениями во время компиляции, например
$done
и $next
.
Пример
Код gj:
// Код шага 1
>
// Код шага 2
$next();
>
// Код шага 3
$done();
Скомпилированный JavaScript-код:
// Код шага 1
__gj__step2();
function __gj__step2() {
// Код шага 2
__gj__step3();
}
function __gj__step3() {
__gj__callback();
}
Формат кода
Код gj представляет собой набор шагов.
Строки-разделители
Каждый шаг (кроме первого) начинается со строки-разделителя. Каждая строка-разделитель должна содержать знак >
, который может дополняться именем шага и/или списком аргументов.
Анонимный шаг без аргументов:
>
Анонимный шаг с аргументами:
> (arg1, arg2)
Именованный шаг без аргументов:
> name
Именованный шаг с аргументами:
> name (arg1, arg2)
Код шага
Код первого шага выполняется в области видимости объемлющей функции, поэтому может содержать объявления переменных, общих для всех шагов.
Код остальных шагов выполняется в области видимости, локальной для шага.
Внутри каждого шага доступны следующие специальные инструкции:
$next
: Представляет ссылку на следующий шаг. В последнем шаге имеет значение, идентичное инструкции $done
.$done
: Представляет ссылку на функцию обратного вызова, переданную объемлющей функции.$name
: Представляет ссылку на шаг с именем name
.
Если первый шаг не содержит ни одной инструкции $next
или $done
, его код автоматически дополняется инструкцией $next()
.
API
compile(source, [options])
: Компилирует исходный код source
и возвращает JavaScript-код. Параметр options
может указывать дополнительные аргументы:
callbackName
: Определяет имя функции обратного вызова, вызываемой при обращении к инструкции $done
. По умолчанию имеет значение callback
.stepPrefix
: Определяет префикс имени функции-обертки кода шага.