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.
// --- Configuração e Instanciação do WorkerManager --- constcacheOptions = { storeName:'mySearchCache', // Nome para o armazenamento local do cache cacheExpirationMs:24 * 60 * 60 * 1000// 24 horas de expiração para o cache }; constworkerPoolSize = 4; // Número de workers no pool
// --- Função Assíncrona para Demonstrar o Uso --- asyncfunctionperformSearchExamples() { constbaseUrl = 'https://api.exemplo.com/fluig-integracao'; // URL base para a sua API
console.log('--- Exemplo 1: Busca com Sucesso ---'); try { constparamsSuccess = { ...commonSearchParams, constraintsField: ['status'], constraintsInitialValue: ['ATIVO'], constraintsType: [ConstraintsType.MUST], // ou o tipo adequado };
// 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);
constdata = awaitsuccessPromise; 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 { constparamsError = { ...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 };
constdata = awaiterrorPromise; // 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 { constparamsToCancel = { ...commonSearchParams, // Adicionar uma constraint que talvez demore ou seja irrelevante constraintsField: ['algumCampoPesado'], constraintsInitialValue: ['valorQueDemora'], constraintsType: [ConstraintsType.SHOULD], // ou o tipo adequado };
// Cancelar a busca após um curto período de tempo setTimeout(() => { console.log('Cancelando a busca...'); triggerCancel(); }, 100); // Tentar cancelar após 100ms
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.
Example