Carregar dados remotos no $mol não é uma API especial — um valor assíncrono é apenas uma propriedade reativa escrita como se a resposta já estivesse ali. A vista a aguarda, mostra um estado de carregamento e renderiza de novo quando os dados chegam.
Chame a rede dentro de um @ $mol_mem e retorne o resultado já parseado. No código não há promise, nem await, nem callback:1namespace $.$${2export class $my_usersextends$.$my_users{3@ $mol_mem4users(){5return this.$.$mol_fetch.json('https://api.example.com/users')as{6id:number7name:string8}[]9}10}11}$mol_fetch suspende a fibra até a resposta chegar, então a computação reinicia e users() devolve o array. Enquanto está pendente, qualquer vista que lê users() mostra automaticamente o estado de carregamento embutido — você não escreve nenhuma flag isLoading. Não retorne você mesmo uma promise de um @ $mol_mem: uma promise guardada como valor deixa a célula no estado de carregamento para sempre, veja Solução de problemas.this.$ é o contexto do componente. Todo serviço passa por ele: $mol_fetch para a rede, $mol_state_arg para a URL, $mol_after_timeout para o tempo. Num teste o contexto é substituído, então esse mesmo users() manda a requisição para um mock em vez da rede, sem mudar uma linha do componente. Testes mostra esse mock.
Vincule os dados resolvidos diretamente em uma lista:1@ $mol_mem2user_names(){3return this.users().map(user=>user.name)4}Quando a resposta chega, users() se atualiza, user_names() recalcula e a lista renderiza. Sem callbacks, sem useEffect.