Ładowanie zdalnych danych w $mol nie jest specjalnym API — wartość asynchroniczna to po prostu właściwość reaktywna napisana tak, jakby odpowiedź już tam była. Widok na nią czeka, pokazuje stan ładowania i renderuje się ponownie, gdy dane nadejdą.
Wywołaj sieć wewnątrz @ $mol_mem i zwróć sparsowany wynik. W kodzie nie ma obietnicy, nie ma await ani callbacka: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 zawiesza włókno do nadejścia odpowiedzi, po czym obliczenie startuje od nowa, a users() zwraca tablicę. Gdy jest w toku, każdy widok czytający users() automatycznie pokazuje wbudowany stan ładowania — nie piszesz żadnej flagi isLoading. Nie zwracaj obietnicy z @ $mol_mem samodzielnie: obietnica przechowana jako wartość zostawia komórkę w stanie ładowania na zawsze, patrz Rozwiązywanie problemów.this.$ to kontekst komponentu. Każdy serwis idzie przez niego: $mol_fetch do sieci, $mol_state_arg do URL, $mol_after_timeout do czasu. W teście kontekst jest podmieniany, więc to samo users() wysyła swoje żądanie do mocka zamiast do sieci, i to bez zmiany choćby jednej linii komponentu. Testowanie pokazuje takiego mocka.
Powiąż rozwiązane dane bezpośrednio z listą:1@ $mol_mem2user_names(){3return this.users().map(user=>user.name)4}Gdy nadejdzie odpowiedź, users() się aktualizuje, user_names() się przelicza, a lista renderuje. Bez callbacków, bez useEffect.