-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
Пример:
export class CompositionProviderTest extends Super {
static override request: typeof Super.request = Super.request({
engine: providerCompositionEngine([
{
request: (_, params) => new Banners().get(Object.get(params, 'opts.query.bannersQuery')),
writeResultInto: 'banners'
},
{
request: (_, params) => new Cards().get(Object.get(params, 'opts.query.contentQuery')),
writeResultInto: 'content'
}
])
});
}Драфт интерфейса (обсуждаемо)
export interface CompositionProvider {
/**
* Запрос который необходимо выполнить.
*
* @param options
* @param params
*/
request(options: RequestOptions, params: MiddlewareParams): Promise<RequestResponseObject>;
/**
* В какие поля результирующего объекта будет записан ответ данного запроса.
*/
writeResultInto: string;
/**
* Если функция вернула false, то запрос не будет создан.
*
* Если функция вернула promise, то будет выполнено ожидание разрешения этого промиса,
* и в случае если он разрешится с false, запрос не будет создан.
*
* @param options
* @param params
*/
requestFilter?(options: RequestOptions, params: MiddlewareParams): CanPromise<boolean>;
/**
* Если true, то при ошибки данного запроса будет сбой всей композиции.
*/
failCompositionOnError?: boolean;
}Зачем?
У extraProviders есть ряд недостатков, в том числе отсутствует необходимая гибкость при создании композиций. А такой простой функционал, как движок для композиции провайдеров, даёт хорошую гибкость и позволяет реализовать как сложные, так и простые сценарии.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels