Блок для сложных, динамических, условных и т.д. операций.
const block = de.func( {
block: ( { params, context, deps, cancel } ) => {
...
return ...;
},
options: ...,
} );
Экшен блока (функция из block
) может:
-
Вернуть другой блок. В этом случае это блок будет выполнен с теми же аргументами (
params
, ...) и его результат и будет считаться результатом работы function-блока. -
Вернуть промис. В этом случае мы ждем, пока промис зарезолвится/реджектится и это и будет результат работы блока.
-
Вернуть все остальное. Тогда это сразу и будет результатом работы блока.
-
Кинуть ошибку. Это значит блок завершится этой ошибкой.
const another_block = require( '...' );
const block = de.func( {
block: ( { params } ) => {
if ( !params.id ) {
throw de.error( {
id: 'INVALID_PARAMS',
} );
}
if ( params.bar ) {
return {
bar: params.bar,
};
}
if ( params.foo ) {
return another_block;
}
return new Promise( ( resolve ) => {
...
} );
},
} );
Если нам не нужно менять options
, можно использовать не de.func
,
а просто функцию:
const block = ( { params } ) => {
return ( params.foo ) ? block_foo : block_bar;
};
И в de.func
, и в сокращенную версию блока приходит
функция generate_id
, чтобы устанавливать зависимости между блоками.
const block = de.func( {
block: ( { params, generate_id } ) => {
const id = generate_id();
...
},
} );
const block = ( { params, generate_id } ) => {
const id = generate_id();
...
};