Class WorkerManager

Este exemplo fornece uma estrutura clara de como consumir o WorkerManager e lidar tanto com resultados de sucesso, quanto com falhas (erros propagados via rejeição da Promise), aderindo às melhores práticas de Promises em JavaScript.

   import { WorkerManager, ConstraintsType} from 'jsegd'; 

// --- Configuração e Instanciação do WorkerManager ---
const cacheOptions = {
storeName: 'mySearchCache', // Nome para o armazenamento local do cache
cacheExpirationMs: 24 * 60 * 60 * 1000 // 24 horas de expiração para o cache
};
const workerPoolSize = 4; // Número de workers no pool

const manager = new WorkerManager(workerPoolSize, cacheOptions);

// --- Exemplo de Parâmetros de Busca ---
const commonSearchParams = {
datasetId: 'meu_dataset_de_produtos',
field: ['codigo', 'descricao', 'preco'],
offset: 0,
limit: 10,
orderby: 'descricao_DESC',
constraintsField: [],
constraintsInitialValue: [],
constraintsFinalValue: [],
constraintsType: [],
constraintsLikeSearch: []
};

// --- Função Assíncrona para Demonstrar o Uso ---
async function performSearchExamples() {
const baseUrl = 'https://api.exemplo.com/fluig-integracao'; // URL base para a sua API

console.log('--- Exemplo 1: Busca com Sucesso ---');
try {
const paramsSuccess = {
...commonSearchParams,
constraintsField: ['status'],
constraintsInitialValue: ['ATIVO'],
constraintsType: [ConstraintsType.MUST], // ou o tipo adequado
};

const { promise: successPromise, cancel: cancelSuccess } = manager.search(baseUrl, paramsSuccess);

// Você pode cancelar a promessa a qualquer momento antes que ela resolva ou rejeite
// setTimeout(() => {
// console.log('Tentando cancelar a busca de sucesso (pode não ter efeito se já concluída)');
// cancelSuccess();
// }, 500);

const data = await successPromise;
console.log('Resultado da busca (Sucesso):', data);
// data aqui será o objeto contido no campo 'data' do seu DatasetResult (o payload puro)
console.log('Primeiro produto:', data && data.length > 0 ? data[0] : 'Nenhum dado retornado.');

} catch (error: any) {
console.error('Erro na busca de sucesso (NÃO ESPERADO):', error);
// Se houver um erro aqui, significa que a Promise rejeitou,
// o que pode indicar um erro de rede, erro no worker, ou um erro tratado e relançado
// pelo WorkerManager.
if (error.statusCode) { // Se for um erro com status code
console.error('Detalhes do erro:', {
statusCode: error.statusCode,
message: error.message,
details: error.errorDetails,
});
}
}

console.log('\n--- Exemplo 2: Busca com Erro (Parâmetros Inválidos) ---');
try {
const paramsError = {
...commonSearchParams,
// Simular um cenário onde um parâmetro obrigatório está faltando
// ou tem um valor inválido, causando um erro 400 da API
datasetId: '', // Exemplo: datasetId vazio
};

const { promise: errorPromise, cancel: cancelError } = manager.search(baseUrl, paramsError);

const data = await errorPromise;
// Se a promise resolver aqui, algo está errado, pois esperamos um erro
console.log('Resultado da busca com erro (NÃO ESPERADO RESOLVER):', data);

} catch (error: any) {
console.error('Erro na busca (ESPERADO):', error);
// Aqui, 'error' deve ser o DTO de erro ou a instância de Error que você rejeitou.
if (error.statusCode) { // Se for um erro com status code
console.error('Detalhes do erro:', {
statusCode: error.statusCode,
message: error.message,
details: error.errorDetails,
});
} else { // Outro tipo de erro, como erro de rede ou interno do worker
console.error('Erro geral:', error.message);
}
}

console.log('\n--- Exemplo 3: Busca que será Cancelada ---');
try {
const paramsToCancel = {
...commonSearchParams,
// Adicionar uma constraint que talvez demore ou seja irrelevante
constraintsField: ['algumCampoPesado'],
constraintsInitialValue: ['valorQueDemora'],
constraintsType: [ConstraintsType.SHOULD], // ou o tipo adequado
};

const { promise: cancelablePromise, cancel: triggerCancel } = manager.search(baseUrl, paramsToCancel);

// Cancelar a busca após um curto período de tempo
setTimeout(() => {
console.log('Cancelando a busca...');
triggerCancel();
}, 100); // Tentar cancelar após 100ms

const data = await cancelablePromise;
console.log('Resultado da busca cancelável (NÃO ESPERADO RESOLVER):', data);

} catch (error: any) {
console.error('Erro na busca cancelável (ESPERADO CANCELAMENTO):', error);
if (error.message === 'Requisição cancelada') {
console.log('A promessa foi cancelada com sucesso.');
} else {
console.error('Erro inesperado na busca cancelável:', error);
}
}
}

// Chamar a função para executar os exemplos
performSearchExamples();

Constructors

Methods

Constructors

  • Parameters

    • poolSize: number = 4
    • cacheOptions: { cacheExpirationMs: number; storeName: string }

    Returns WorkerManager

Methods