Skip to content

[RFC] Instâncias e emissão de eventos #28

Description

@leomp12

Proposta

Emitir eventos após cada requisição, retornando o objeto response:

  1. Os eventos de sucesso (resolved) serão emitidos para cada combinação método (cada API) e resource (${api}.${resource});
  2. O nome do evento será equivalente ao método HTTP (lowercase);
  3. Eventos de erro (reject) serão emitidos diretamente no método com o nome error;

Exemplos de uso:

ecomClient.store.products.on('get', ({ data }) => {
  console.log(data.sku) // "S123"
})
ecomClient.store.on('error', response => {
  console.log(response.status) // 400
})

Motivação

  • Facilitar manipulação de dados assíncronos em múltiplos componentes/widgets no storefront;

    • Ex.: um produto carrega, um widget escuta e trata o evento e um adiciona as estrelinhas de review, substituiria o tratamento atual via IntersectionObserver, acredito que seria mais fácil de implementar e mais flexível (todo o body do produto recebido como objeto).
  • Centralizar manipulação de erros e data (um state global ?) no admin;

  • Centralizar com facilidade o debug de requisições com erro server side (Node.js);

O que as instâncias têm a ver com isto?

Segurança: a intenção seria adicionar a possibilidade de criar intâncias de forma parecida com o axios para executar requisições autenticadas, neste caso os eventos são emitidos dentro da própria instância, que deverá ser um objeto privado, fora do escopo global.

Não emitir eventos na instância padrão caso a requisição seja autenticada ?

Outra opção

Uma implementação parecida, com a mesma solução mas talvez mais possibilidades pode ser utilizar RxJS e fornecer observadores em vez de métodos retornando promises. 🤔

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions